zoukankan      html  css  js  c++  java
  • 线程池之异步方式调用函数

    (一)分类:

      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的时候,系统会在内部以我们的名义分配一个工作项。如果打算提交大量的工作项,那么出于性能和内存使用的考虑,创建工作项一次,并多次提交它会更好。

  • 相关阅读:
    Spring——Spring整合Mybatis及事务
    Spring——配置,依赖注入,Bean的自动装配
    Mybatis—多对一和一对多
    Mybatis—动态SQL
    Elasticserch学习之查询字符串
    Elasticserch学习之分页
    Elasticserch学习之多索引和多类别
    Elasticserch学习之搜索(二)
    Elasticserch学习之数据
    Elasticserch学习之添加索引
  • 原文地址:https://www.cnblogs.com/wang-can/p/3340151.html
Copyright © 2011-2022 走看看