<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    windows下利用線程池完成多任務的分配和運行

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    在做項目的過程中有時候為了提升效率,用了多線程的方法來對任務進行分割和應用,后來發現,采用線程池的方法能更好的利用線程資源來計算任務,網上有很多關于如何運行線程池的例子,msdn上也給出了對應的例子:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686980(v=vs.85).aspx

    感興趣的話大家可以去看看,這里我給出一個簡單的demo,利用線程池單次調用多次調用,例子如下:

     

    [cpp] view plain copy  
    1. #include<Windows.h>  
    2. #include<iostream>  
    3. #include<cstdlib>  
    4.   
    5. using namespace std;  
    6.   
    7. #define THREAD_NUM 10  
    8.   
    9. struct tempStruct  
    10. {  
    11.     int a;  
    12.     int b;  
    13. };  
    14.   
    15. VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context);  
    16. VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work);  
    17.   
    18. void main()  
    19. {  
    20.     PTP_WORK tpWork[THREAD_NUM];  
    21.     tempStruct transferStruct[THREAD_NUM];  
    22.   
    23.     for ( int i = 0; i< THREAD_NUM; i++ )  
    24.     {  
    25.         transferStruct[i].a = i;  
    26.         transferStruct[i].b = i+1;  
    27.     }  
    28.   
    29.     //單次工作提交  
    30.     TrySubmitThreadpoolCallback(SimpleCallback,&transferStruct[2],NULL);  
    31.   
    32.     for ( int i = 0; i< THREAD_NUM; i++ )  
    33.         tpWork[i] = CreateThreadpoolWork(WorkCallbackTemp,&transferStruct[i],NULL);  
    34.   
    35.     //提交工作  
    36.     for ( int i = 0; i< THREAD_NUM; i++ )  
    37.         SubmitThreadpoolWork(tpWork[i]);  
    38.   
    39.     //等待工作結束  
    40.     for ( int i = 0; i< THREAD_NUM; i++ )  
    41.         WaitForThreadpoolWorkCallbacks(tpWork[i],false);  
    42.   
    43.     //關閉工作對象  
    44.     for ( int i = 0; i< THREAD_NUM; i++ )  
    45.         CloseThreadpoolWork(tpWork[i]);   
    46.   
    47.     system("pause");  
    48. }  
    49.   
    50. VOID CALLBACK SimpleCallback(PTP_CALLBACK_INSTANCE Instance,void* Context)  
    51. {  
    52.     tempStruct *pt = (tempStruct *)Context;  
    53.   
    54.     int pruduct = pt->a * pt->b;  
    55.     cout <<"Simple struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" pruduct: "<<pruduct<<endl;  
    56. }  
    57.   
    58. VOID CALLBACK WorkCallbackTemp(PTP_CALLBACK_INSTANCE Instance, void* Context, PTP_WORK Work)  
    59. {  
    60.     tempStruct *pt = (tempStruct *)Context;  
    61.   
    62.     int sum = pt->a + pt->b;  
    63.     cout <<"Work struct a: "<<pt->a<<" struct_temp.b: "<<pt->b<<" sum: "<<sum<<endl;  
    64. }  

     

    PS有個網站的教程寫得很好,收益很多大家也可以去看看:http://www.cnblogs.com/kzloser/archive/2013/03/11/2909221.html

    做個mark,希望對需要的朋友有幫助!

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全