<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Windows線程API —CreateTimerQueueTimer/DeleteTimerQueueTimer的使用

      問題代碼:

       1 #include<windows.h>
       2 #include<iostream>
       3 #include<thread>
       4 HANDLE h1;
       5 HANDLE h2;
       6 
       7 void CALLBACK test(PVOID a, BOOLEAN b)
       8 {
       9     std::cout << "This a test function excuted by Thread:" << std::this_thread::get_id()<< std::endl;
      10     //std::cout << "Here we try to delete timer in Thread:" << std::this_thread::get_id() << std::endl;
      11     if (0 == DeleteTimerQueueTimer(NULL, h1, INVALID_HANDLE_VALUE))
      12     {
      13         std::cout << "Timer  Deleted Failed in Thread:" << std::this_thread::get_id() << std::endl;
      14     }
      15     std::cout << "Timer  Deleted Successfully in Thread:" << std::this_thread::get_id() << std::endl;
      16 
      17 }
      18 void CALLBACK test1(PVOID l, BOOLEAN t)
      19 {
      20     std::cout << "This a test1 function excuted by Thread:" << std::this_thread::get_id() << std::endl;
      21 }
      22 
      23 int main()
      24 {
      25     
      26     std::cout << "******This is a Test for TimeQueueTimer in Windows API******" << std::endl;
      27     std::cout << "Main thread is executed by thread: " << std::this_thread::get_id() << std::endl;
      28     //test(PVOID(1), TRUE);
      29     try
      30     {
      31         CreateTimerQueueTimer(&h1, NULL, WAITORTIMERCALLBACK(test), NULL, 0, 1000, WT_EXECUTEINTIMERTHREAD);
      32         //Sleep(1000);
      33 
      34         CreateTimerQueueTimer(&h2, NULL, WAITORTIMERCALLBACK(test1), NULL, 0, 1000, WT_EXECUTEINTIMERTHREAD);
      35 
      36 
      37         //CreateTimerQueueTimer(&h1, NULL, [](PVOID lpParameter, BOOLEAN TimerOrWaitFired) {
      38         //    test(lpParameter, TimerOrWaitFired); // Call your original test function from within the lambda
      39         //    }, NULL, 0, 1000, WT_EXECUTEINTIMERTHREAD);
      40 
      41     }
      42     catch (const std::exception& e)
      43     {
      44         std::cout << "something error with the timer: " << e.what() << std::endl;
      45     }
      46 
      47 
      48     if (std::cin.get())
      49     {
      50         if (0 == DeleteTimerQueueTimer(NULL, h2, INVALID_HANDLE_VALUE))
      51         {
      52             std::cout << "Timer  Deleted Failed in Thread:" << std::this_thread::get_id() << std::endl;
      53         }
      54         std::cout << "Timer  Deleted Successfully in Thread:" << std::this_thread::get_id() << std::endl;
      55 
      56     };
      57     Sleep(1000);
      58 
      59     return 0;
      60 }

      Main()函數中test1回調無法執行!

      問題分析:

      CreateTimerQueueTimerDeleteTimerQueueTimer 分別負責線程的開啟和中止,函數定義如下:

      BOOL CreateTimerQueueTimer(
        [out]          PHANDLE             phNewTimer,
        [in, optional] HANDLE              TimerQueue,
        [in]           WAITORTIMERCALLBACK Callback,
        [in, optional] PVOID               Parameter,
        [in]           DWORD               DueTime,
        [in]           DWORD               Period,
        [in]           ULONG               Flags
      );
      BOOL DeleteTimerQueueTimer(
        [in, optional] HANDLE TimerQueue,
        [in]           HANDLE Timer,
        [in, optional] HANDLE CompletionEvent
      );

      主線程中分別利用CreateTimerQueueTimer開啟后臺線程調用回調test()和test1(),并在test()調用中結束調用。由于DeleteTimerQueueTimerCompletionEvent中使用的是INVALID_HANDLE_VALUE,導致線程會等待所有timer線程執行結束,才能返回。而當前執行回調的線程等不到自己結束,陷入死鎖。因為CreateTimerQueueTimerFlag參數使用的是WT_EXECUTEINTIMERTHREAD導致test1回調和test使用的是同一線程,而test線程已經死鎖,所以test1也無法得到執行

      解決方案:

      1. 不應該在回調中調用DeleteTimerQueueTimer中止線程
      2. 如果必須在回調中中止線程,CompletionEvent應設為NULL,標記當前線程結束后,直接返回0(執行失敗),回調執行完,不再繼續執行
      3. CreateTimerQueueTimer使用Flag WT_EXECUTEDEFAULT開啟新線程,即使上一個timer線程死鎖,第二個線程仍可以執行

       

      posted @ 2023-08-26 17:59  robot2017  閱讀(443)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产免费无遮挡吸奶头视频 | 国产精成人品日日拍夜夜免费| 亚洲AV乱码毛片在线播放| 97av麻豆蜜桃一区二区| 成人国产精品三上悠亚久久| 亚洲精品乱码久久久久久按摩高清| 国产女人18毛片水真多1| 男女吃奶做爰猛烈紧视频| 成人精品日韩专区在线观看| 116美女极品a级毛片| 国产超碰无码最新上传| 成人永久性免费在线视频| 国产亚洲制服免视频| 久久精品av国产一区二区| 中文字幕一区二区人妻| 亚洲国产在一区二区三区| 日韩V欧美V中文在线| 久久这里只精品国产免费9| 国产一区二区三区禁18| 乱人伦人妻中文字幕不卡| 欧美人与zoxxxx另类| 鲁丝一区鲁丝二区鲁丝三区| 国产精品福利自产拍在线观看| 亚洲av色夜色精品一区| 少妇激情一区二区三区视频小说| 亚洲精品国产自在现线最新| 色秀网在线观看视频免费| 香蕉久久精品日日躁夜夜躁夏| 高清偷拍一区二区三区| 五级黄高潮片90分钟视频| 精品国产一区二区三区国产区| 日本高清一区免费中文视频| 午夜在线观看成人av| 五月天丁香婷婷亚洲欧洲国产| 中国帅小伙gaysextubevideo| 国产精品爽爽va在线观看网站 | 国产精品一区二区三区黄色| 又黄又爽又色视频免费| 99人中文字幕亚洲区三| 性欧美VIDEOFREE高清大喷水 | 国产成人精品一区二三区|