青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

通過異步程序調(diào)用(APC)實現(xiàn)的定時功能

定時器是一個在特定時間或者規(guī)則間隔被激發(fā)的內(nèi)核對象。結(jié)合定時器的異步程序調(diào)用可以允許回調(diào)函數(shù)在任何定時器被激發(fā)的時候執(zhí)行。本文的例子代碼顯示了如何實現(xiàn)。
  使用本定時器時,你需要把常量_WIN32_WINNT定義為0x0400,并且此常量應(yīng)該在包之前定義,以確保聲明合適的定時器原型函數(shù)。
  通過調(diào)用CreateWaitableTimer()可以創(chuàng)建一個定時器,此函數(shù)返回一個指向內(nèi)核對象的句柄。若定時器已經(jīng)存在,你可以通過使用OpenWaitableTimer()獲得一個進程相關(guān)的句柄。無論是通過CreateWaitableTimer() 還是通過OpenWaitableTimer()獲得的句柄,在不需要定時器時必須釋放,方法是使用函數(shù)CloseHandle()
  定時的時間通過調(diào)用SetWaitableTimer()來設(shè)置,可以設(shè)置為一個特定的時刻(如December 16, 1999 at 9:45 PM)或者一個相對的時間(如從現(xiàn)在起每五分鐘)。函數(shù)SetWaitableTime()定時的時間參數(shù)要求LARGE_INTEGER類型。這個值應(yīng)該符合在結(jié)構(gòu)體FILETIME中描述的格式。如果值是正的,代表一個特定的時刻。如果值是負(fù)的,代表以100納秒為單位的相對時間。后面的示例代碼中使用的是相對時間。在調(diào)用SetWaitableTimer()函數(shù)后,定時器將在每5秒被激發(fā)一次。
  你也可以將定時器設(shè)置為周期性的自我激發(fā),方法是向SetWaitableTimer()的第三個參數(shù)傳遞一個周期參數(shù)(以毫秒為單位)。在CreateWaitableTimer()的第二個參數(shù)傳遞FALSE可以產(chǎn)生一個自動歸零的定時器。本例設(shè)置周期為兩秒的定時器。
  當(dāng)設(shè)置了定時器之后,你就可以將APC與其結(jié)合起來。這里把APC函數(shù)稱作完全例程。完全例程的地址作為SetWaitableTimer()的第四個參數(shù)。第五個參數(shù)是一個空類型的指針,你可以使用它來傳遞完全例程的參數(shù)。
  在所有的APC中,要執(zhí)行一個完全例程則線程必須處于監(jiān)聽狀態(tài)。完全例程將總是被調(diào)用SetWaitableTimer()的相同的線程執(zhí)行,所以此線程必須將必須其自身置于監(jiān)聽狀態(tài)??梢哉{(diào)用下面的任何一個監(jiān)聽函數(shù)來完成監(jiān)聽狀態(tài)的設(shè)置:
  • SleepEx();
  • WaitForSingleObjectEx();
  • WaitForMultipleObjectsEx();
  • MsgWaitForMultipleObjectsEx();
  • SignalObjectAndWait();
  任何一個線程都有一個APC隊列。在調(diào)用上面的任何一個函數(shù)時,如果線程的APC隊列中有實體,則此線程不會進入休眠狀態(tài),取而代之要做的是將實體從APC隊列中取出,然后調(diào)用相應(yīng)的完全例程。
  如果在APC隊列中不存在實體,那么線程將會被掛起,直至等待條件滿足為止。滿足等待條件的有:一個實體加入到APC隊列中,超時,激活句柄等,以及在調(diào)用MsgWaitForMultipleObjectsEx()情況下,一個消息進入到線程的一個消息隊列中。若等待條件滿足的是APC隊列中的一個實體,那么線程會被激活,并且執(zhí)行完全例程,這種情況下的函數(shù)的返回值是 WAIT_IO_COMPLETION.
【重要提示】
1、在執(zhí)行完一個完全例程之后,系統(tǒng)會檢查在APC中剩下的實體以處理。一個監(jiān)視函數(shù)僅僅在處理完所有APC實體后才返回。因此,如果實體加入到APC隊列的速度比處理的更快的話,則調(diào)用這些函數(shù)可能永遠也不能返回。特別當(dāng)定時等待的時間比起要求執(zhí)行完全例程的時間更短的話,這種情況更容易發(fā)生。
2
、當(dāng)使用APC來實現(xiàn)定時器時,設(shè)置定時的線程不應(yīng)該等待定時器的句柄。如果等待定時器的句柄的話,則喚起這個線程的原因是定時器被激活,而不是有實體加入到APC隊列中。這時線程將不再處于監(jiān)聽狀態(tài),所以完全例程也不會被調(diào)用。在本例中,Sleep()被用于將線程置于監(jiān)聽狀態(tài)。在定時器激活后,如果有實體被加入到此線程的APC隊列中時,Sleep()就會喚醒此線程。
【示例代碼】
#define _WIN32_WINNT 0x0500
 
#include <windows.h>
#include <stdio.h>
 
#define _SECOND 10000000
 
typedef struct _MYDATA {
   TCHAR *szText;
   DWORD dwValue;
} MYDATA;
 
VOID CALLBACK TimerAPCProc(
   LPVOID lpArg,               // Data value
   DWORD dwTimerLowValue,      // Timer low value
   DWORD dwTimerHighValue )    // Timer high value
 
{
   MYDATA *pMyData = (MYDATA *)lpArg;
 
   printf( "Message: %s\nValue: %d\n\n", pMyData->szText,
          pMyData->dwValue );
   MessageBeep(0);
 
}
 
void main( void )
{
   HANDLE          hTimer;
   BOOL            bSuccess;
   __int64         qwDueTime;
   LARGE_INTEGER   liDueTime;
   MYDATA          MyData;
   TCHAR           szError[255];
 
   MyData.szText = "This is my data.";
   MyData.dwValue = 100;
 
   if ( hTimer = CreateWaitableTimer(
           NULL,                   // Default security attributes
           FALSE,                  // Create auto-reset timer
           "MyTimer" ) )           // Name of waitable timer
   {
      __try
      {
         // Create an integer that will be used to signal the timer
         // 5 seconds from now.
         qwDueTime = -5 * _SECOND;
 
         // Copy the relative time into a LARGE_INTEGER.
         liDueTime.LowPart = (DWORD) ( qwDueTime & 0xFFFFFFFF );
         liDueTime.HighPart = (LONG) ( qwDueTime >> 32 );
 
         bSuccess = SetWaitableTimer(
            hTimer,           // Handle to the timer object
            &liDueTime,       // When timer will become signaled
            2000,             // Periodic timer interval of 2 seconds
            TimerAPCProc,     // Completion routine
            &MyData,          // Argument to the completion routine
            FALSE );          // Do not restore a suspended system
 
         if ( bSuccess )
         {
            for ( ; MyData.dwValue < 1000; MyData.dwValue += 100 )
            {
               SleepEx(
                  INFINITE,     // Wait forever
                  TRUE );       // Put thread in an alertable state
            }
 
         }
         else
         {
            wsprintf( szError, "SetWaitableTimer failed with Error \
               %d.", GetLastError() );
            MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
         }
 
      }
      __finally
      {
         CloseHandle( hTimer );
      }
   }
   else
   {
      wsprintf( szError, "CreateWaitableTimer failed with Error %d.",
          GetLastError() );
      MessageBox( NULL, szError, "Error", MB_ICONEXCLAMATION );
   }
}

posted on 2008-05-09 17:20 肥仔 閱讀(617) 評論(0)  編輯 收藏 引用 所屬分類: MFC存檔

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美黄色网络| 新67194成人永久网站| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产精品悠悠久久琪琪| 午夜亚洲福利在线老司机| 亚洲一级片在线观看| 欧美日本在线| 一区二区三区黄色| 亚洲综合色在线| 国产精品久久久一区麻豆最新章节| 日韩午夜剧场| 亚洲一区免费看| 国产精品久久久久7777婷婷| 亚洲桃色在线一区| 久久99在线观看| 国产一区二区成人| 久久麻豆一区二区| 欧美激情麻豆| 在线亚洲电影| 国产亚洲精品美女| 久久夜精品va视频免费观看| 亚洲第一视频| 亚洲图片欧美日产| 国产美女精品视频| 久久久久久久久久久久久久一区 | 99在线热播精品免费| 欧美日本在线看| 国产精品99久久久久久久vr| 欧美在线网址| 在线日本成人| 欧美天天视频| 久久精品夜夜夜夜久久| 亚洲日韩中文字幕在线播放| 小黄鸭视频精品导航| 亚洲国产精品一区二区www| 欧美日韩在线播放| 久久精品国产一区二区三区| 亚洲精品1区| 翔田千里一区二区| 亚洲国产欧美久久| 国产精品毛片大码女人| 久久久亚洲影院你懂的| 一本色道久久综合亚洲精品不卡| 久久精品视频网| 亚洲乱码国产乱码精品精98午夜 | 久久综合伊人77777麻豆| 亚洲国产成人精品久久久国产成人一区| 日韩亚洲欧美中文三级| 国产精品一区二区三区久久久| 狼人天天伊人久久| 亚洲一区二区三区欧美| 欧美国产亚洲另类动漫| 欧美一区三区二区在线观看| 亚洲精品一区二区三区不| 国产欧美日韩视频一区二区三区| 嫩草影视亚洲| 亚洲欧美国产精品va在线观看 | 亚洲精品日韩一| 久久国产视频网站| 日韩视频不卡| 老司机成人在线视频| 在线视频你懂得一区| 在线看片第一页欧美| 国产精品久久久久秋霞鲁丝 | 久久久久久久久久久久久久一区 | 久久久久免费观看| 亚洲午夜精品久久| 亚洲人被黑人高潮完整版| 国产亚洲精品久久久久久| 欧美视频二区36p| 欧美电影专区| 久久一二三国产| 性欧美videos另类喷潮| 一区二区三区免费观看| 亚洲精品久久久久| 亚洲大胆人体视频| 蜜桃av噜噜一区| 久久久久免费视频| 久久精视频免费在线久久完整在线看| 亚洲男人天堂2024| 亚洲一区二区在线看| 99精品99久久久久久宅男| 亚洲韩国精品一区| 亚洲国产精品一区| 亚洲国产日韩在线| 樱花yy私人影院亚洲| 国内精品久久久久影院 日本资源| 国产欧美日韩视频一区二区| 国产精品午夜在线观看| 国产精品久久久久久久久久久久 | 欧美华人在线视频| 蜜臀va亚洲va欧美va天堂 | 一区二区三区四区在线| 亚洲精选中文字幕| 日韩一级在线| 在线亚洲自拍| 亚洲一区二区三区精品视频| 亚洲香蕉网站| 亚洲欧美日韩区| 欧美一级淫片播放口| 久久国产主播| 久久精品一区二区三区不卡| 久久久精品日韩| 美女诱惑黄网站一区| 欧美大成色www永久网站婷| 欧美激情按摩在线| 欧美日韩午夜剧场| 国产精品美女久久| 国产精品揄拍500视频| 国产麻豆日韩欧美久久| 国产一区二区三区黄| 一区二区亚洲精品国产| 亚洲国产你懂的| av成人国产| 亚洲欧美国产高清| 久久精品99国产精品| 免费亚洲电影在线| 亚洲国产精品一区二区尤物区| 亚洲人成网站在线观看播放| 日韩一级二级三级| 性欧美video另类hd性玩具| 久久综合一区| 欧美视频一区二区三区四区| 国产欧美一区二区精品性| 尤物精品在线| 亚洲无限乱码一二三四麻| 欧美一区国产二区| 欧美国产日韩视频| 一区二区三区欧美视频| 久久成人18免费观看| 久久九九久久九九| 欧美黄色影院| 亚洲国产日韩欧美在线动漫 | 午夜精品国产更新| 久久免费高清| 亚洲美女性视频| 午夜精品视频在线观看| 欧美成人久久| 国产女精品视频网站免费 | 亚洲在线一区| 亚洲国产欧美日韩精品| 国产精品任我爽爆在线播放| 六月丁香综合| 欧美日韩精品久久久| 国产欧美一区二区三区在线看蜜臀| 伊人精品成人久久综合软件| av成人国产| 久久天堂成人| 亚洲美女中文字幕| 久久久久久成人| 国产精品爱啪在线线免费观看| 激情综合亚洲| 亚洲欧美在线播放| 欧美激情视频一区二区三区免费 | 亚洲一区二区三区在线| 老鸭窝毛片一区二区三区| 国产精品久久国产三级国电话系列| 亚洲国产精品久久久久久女王| 亚洲综合色噜噜狠狠| 亚洲激情视频在线| 久久久噜噜噜久久人人看| 国产精品视频yy9099| 日韩一区二区精品| 欧美成人亚洲成人日韩成人| 午夜国产一区| 欧美日韩中文字幕日韩欧美| 亚洲成人在线免费| 久久精品国内一区二区三区| 99综合电影在线视频| 欧美大片91| 亚洲第一黄网| 麻豆精品视频在线观看视频| 亚洲欧美大片| 国产精品高清一区二区三区| 99精品国产在热久久| 欧美va天堂| 久久久久久久精| 精品福利电影| 久久久久国产免费免费| 亚洲自拍电影| 国产精品私拍pans大尺度在线| 亚洲深夜av| 亚洲毛片av在线| 欧美日韩久久久久久| 一区二区毛片| 99国产精品久久久久久久久久| 欧美—级高清免费播放| 日韩视频在线一区| 亚洲人成小说网站色在线| 欧美精品激情在线| 日韩视频永久免费| 亚洲国产日韩欧美在线图片| 欧美成人免费网| 亚洲精品社区| 亚洲国产成人精品久久| 欧美黄色片免费观看| 一个色综合av| 亚洲一区二区三区在线观看视频 | 在线视频精品一| 国产精品久久二区二区|