• 线程池之异步方式调用函数


    (一)分类:

      1、不创建工作项的方式

      2、通过创建一个工作项的方式

    (二)不创建工作项的方式

      步骤:

        1、写一个类似void NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance,PVOID pvContext),名字可以自己写

        2、TrySubmitThreadpoolCallback,通过这个函数,将一个工作项添加到线程池的队列中。

      代码:

    #include <iostream>
    #include <afx.h>
    using namespace std;
    
    void NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance,
    	PVOID pvContext)
    {
    	cout << "线程ID: " << GetCurrentThreadId() << endl;
    }
    
    void main()
    {
    	TrySubmitThreadpoolCallback(SimpleCallback, NULL, NULL);
    	Sleep(1000);	//确定用同一个线程来执行
    	TrySubmitThreadpoolCallback(SimpleCallback, NULL, NULL);
    	Sleep(1000);	//确保2个线程都能够被执行
    }

      结果:

      思考:

        其实我们还可以不用第一个Sleep,我们会发现线程ID是不同的。这就更加证明了这是一个线程池。 

    (三)创建一个工作项的方式

      步骤:

        1、写一个类似void NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pvContext, PTP_WORK Work)名字可以自己写

        2、CreateThreadpoolWork,创建一个工作项

        3、SubmitThreadpoolWork,提交请求

        4、CloseThreadpoolWork,关闭工作项

      代码:

      

    #include <iostream>
    #include <afx.h>
    using namespace std;
    
    void NTAPI SimpleCallback(PTP_CALLBACK_INSTANCE pInstance,
    	PVOID pvContext, PTP_WORK Work)
    {
    	cout << "线程ID: " << GetCurrentThreadId() << endl;
    }
    
    void main()
    {
    	PTP_WORK pWork = CreateThreadpoolWork(SimpleCallback, NULL, NULL);
    	SubmitThreadpoolWork(pWork);
    	Sleep(1000);	//确定用同一个线程来执行
    	SubmitThreadpoolWork(pWork);
    	SubmitThreadpoolWork(pWork);
    	Sleep(1000);	//确保线程函数都能够被执行
    
    	CloseThreadpoolWork(pWork);
    }
    

       结果:

      

      思考:

      《Windows核心编程》:每一次调用TrySubmitThreadpoolCallback的时候,系统会在内部以我们的名义分配一个工作项。如果打算提交大量的工作项,那么出于性能和内存使用的考虑,创建工作项一次,并多次提交它会更好。

  • 相关阅读:
    web print
    datediff
    Typical AJAX
    sql中构建sql语句,再exec这条SQL语句
    ASP.NET中将数据输出到WORD、EXCEL、TXT、HTM
    sql中添加单引号
    sql语句批处理
    日期分组
    异步线程
    电脑内存大有什么好处?
  • 原文地址:https://www.cnblogs.com/wang-can/p/3340151.html
Copyright © 2020-2023  润新知