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

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

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

轉(zhuǎn)載自:http://www.vckbase.com/document/viewdoc/?id=1587

編譯:張海粟

  定時(shí)器是一個(gè)在特定時(shí)間或者規(guī)則間隔被激發(fā)的內(nèi)核對(duì)象。結(jié)合定時(shí)器的異步程序調(diào)用可以允許回調(diào)函數(shù)在任何定時(shí)器被激發(fā)的時(shí)候執(zhí)行。本文的例子代碼顯示了如何實(shí)現(xiàn)。
  使用本定時(shí)器時(shí),你需要把常量_WIN32_WINNT定義為0x0400,并且此常量應(yīng)該在包之前定義,以確保聲明合適的定時(shí)器原型函數(shù)。
  通過調(diào)用CreateWaitableTimer()可以創(chuàng)建一個(gè)定時(shí)器,此函數(shù)返回一個(gè)指向內(nèi)核對(duì)象的句柄。若定時(shí)器已經(jīng)存在,你可以通過使用OpenWaitableTimer()獲得一個(gè)進(jìn)程相關(guān)的句柄。無論是通過CreateWaitableTimer() 還是通過OpenWaitableTimer()獲得的句柄,在不需要定 時(shí)器時(shí)必須釋放,方法是使用函數(shù)CloseHandle()。
  定時(shí)的時(shí)間通過調(diào)用SetWaitableTimer()來設(shè)置,可以設(shè)置為一個(gè)特定的時(shí)刻(如December 16, 1999 at 9:45 PM)或者一個(gè)相對(duì)的時(shí)間(如從現(xiàn)在起每五分鐘)。函數(shù)SetWaitableTime()定時(shí)的時(shí)間參數(shù)要求LARGE_INTEGER類型。這個(gè)值應(yīng)該符合在結(jié)構(gòu)體FILETIME中描述的格式。如果值是正的,代表一個(gè)特定的時(shí)刻。如果值是負(fù)的,代表以100納秒為單位的相對(duì)時(shí)間。后面的示例代碼中使用的是相對(duì)時(shí)間。在調(diào)用SetWaitableTimer()函數(shù)后,定時(shí)器將在每5秒被激發(fā)一次。
  你也可以將定時(shí)器設(shè)置為周期性的自我激發(fā),方法是向SetWaitableTimer()的第三個(gè)參數(shù)傳遞一個(gè)周期參數(shù)(以毫秒為單位)。在CreateWaitableTimer()的第二個(gè)參數(shù)傳遞FALSE可以產(chǎn)生一個(gè)自動(dòng)歸零的定時(shí)器。本例設(shè)置周期為兩秒的定時(shí)器。
  當(dāng)設(shè)置了定時(shí)器之后,你就可以將APC與其結(jié)合起來。這里把APC函數(shù)稱作完全例程。完全例程的地址作為SetWaitableTimer()的第四個(gè)參數(shù)。第五個(gè)參數(shù)是一個(gè)空類型的指針,你可以使用它來傳遞完全例程的參數(shù)。
  在所有的APC中,要執(zhí)行一個(gè)完全例程則線程必須處于監(jiān)聽狀態(tài)。完全例程將總是被調(diào)用SetWaitableTimer()的相同的線程執(zhí)行,所以此線程必須將必須其自身置于監(jiān)聽狀態(tài)。可以調(diào)用下面的任何一個(gè)監(jiān)聽函數(shù)來完成監(jiān)聽狀態(tài)的設(shè)置:

  • SleepEx();
  • WaitForSingleObjectEx();
  • WaitForMultipleObjectsEx();
  • MsgWaitForMultipleObjectsEx();
  • SignalObjectAndWait();

  任何一個(gè)線程都有一個(gè)APC隊(duì)列。在調(diào)用上面的任何一個(gè)函數(shù)時(shí),如果線程的APC隊(duì)列中有實(shí)體,則此線程不會(huì)進(jìn)入休眠狀態(tài),取而代之要做的是將實(shí)體從APC隊(duì)列中取出,然后調(diào)用相應(yīng)的完全例程。
  如果在APC隊(duì)列中不存在實(shí)體,那么線程將會(huì)被掛起,直至等待條件滿足為止。滿足等待條件的有:一個(gè)實(shí)體加入到APC隊(duì)列中,超時(shí),激活句柄等,以及在調(diào)用MsgWaitForMultipleObjectsEx()情況下,一個(gè)消息進(jìn)入到線程的一個(gè)消息隊(duì)列中。若等待條件滿足的是APC隊(duì)列中的一個(gè)實(shí)體,那么線程會(huì)被激活,并且執(zhí)行完全例程,這種情況下的函數(shù)的返回值是 WAIT_IO_COMPLETION.

【重要提示】

1、在執(zhí)行完一個(gè)完全例程之后,系統(tǒng)會(huì)檢查在APC中剩下的實(shí)體以處理。一個(gè)監(jiān)視函數(shù)僅僅在處理完所有APC實(shí)體后才返回。因此,如果實(shí)體加入到APC隊(duì)列的速度比處理的更快的話,則調(diào)用這些函數(shù)可能永遠(yuǎn)也不能返回。特別當(dāng)定時(shí)等待的時(shí)間比起要求執(zhí)行完全例程的時(shí)間更短的話,這種情況更容易發(fā)生。 
2、當(dāng)使用APC來實(shí)現(xiàn)定時(shí)器時(shí),設(shè)置定時(shí)的線程不應(yīng)該等待定時(shí)器的句柄。如果等待定時(shí)器的句柄的話,則喚起這個(gè)線程的原因是定時(shí)器被激活,而不是有實(shí)體加入到APC隊(duì)列中。這時(shí)線程將不再處于監(jiān)聽狀態(tài),所以完全例程也不會(huì)被調(diào)用。在本例中,Sleep()被用于將線程置于監(jiān)聽狀態(tài)。在定時(shí)器激活后,如果有實(shí)體被加入到此線程的APC隊(duì)列中時(shí),Sleep()就會(huì)喚醒此線程。

【示例代碼】

#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 );
   }

}

 

 

原文參考:Using a Waitable Timer with an Asynchronous Procedure Call

posted on 2011-06-02 17:15 楊粼波 閱讀(720) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲午夜精品17c| 久久久久国色av免费看影院| 亚洲人体1000| 亚洲乱码国产乱码精品精| 亚洲日本欧美| 99精品久久久| 亚洲欧美另类在线观看| 午夜视频一区在线观看| 久久高清福利视频| 毛片一区二区三区| 亚洲大片精品永久免费| 亚洲国产天堂久久国产91| 亚洲美女淫视频| 一区二区欧美国产| 欧美一级视频精品观看| 久久久久久穴| 欧美日韩久久久久久| 国产精品九九久久久久久久| 国产三级精品在线不卡| 1024成人| 亚洲午夜电影在线观看| 欧美一区深夜视频| 久久综合中文| 日韩亚洲不卡在线| 欧美一级网站| 欧美大片免费观看| 国产精品一区免费观看| 狠狠色狠狠色综合日日91app| 亚洲欧洲一区二区在线观看| 亚洲视频在线观看免费| 久久精品视频在线观看| 欧美国产精品| 亚洲永久在线观看| 猛干欧美女孩| 国产精品久久久久久久久免费樱桃 | 免费亚洲视频| 91久久精品国产91久久性色tv | 欧美日韩午夜| 国内久久婷婷综合| 99人久久精品视频最新地址| 欧美在线黄色| 亚洲第一在线视频| 亚洲欧美999| 欧美成人午夜激情视频| 国产精品色午夜在线观看| 亚洲国产精品久久人人爱蜜臀| 亚洲在线视频观看| 欧美成人精品不卡视频在线观看| 日韩一级黄色大片| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日一区二区在线观看 | 欧美成人黑人xx视频免费观看| 国产精品美女久久久浪潮软件| 亚洲国产视频一区二区| 久久av一区二区三区漫画| 亚洲黄色小视频| 久久精品国产精品亚洲综合| 国产精品v亚洲精品v日韩精品| 亚洲国产综合91精品麻豆| 欧美一区二区三区四区在线| 亚洲人成免费| 久久一区二区三区四区| 国产三级欧美三级| 亚洲自拍另类| 亚洲国产专区校园欧美| 久久久噜噜噜| 国产亚洲综合在线| 午夜精品久久久久久久99樱桃| 亚洲国产精品久久| 久久久亚洲欧洲日产国码αv | 日韩性生活视频| 美女图片一区二区| 香蕉久久精品日日躁夜夜躁| 国产精品ⅴa在线观看h| 99ri日韩精品视频| 亚洲成色www8888| 久久女同精品一区二区| 国产亚洲精品激情久久| 欧美一区中文字幕| 亚洲午夜久久久久久久久电影院| 欧美精品一区二区三区一线天视频| 亚洲福利在线看| 鲁大师影院一区二区三区| 亚洲欧美日韩在线播放| 国产精品久久久久毛片软件| 亚洲午夜一区二区| av成人毛片| 欧美日韩另类综合| 中文成人激情娱乐网| 亚洲精品久久久久久久久久久| 免费成人av在线看| 亚洲国产经典视频| 欧美二区乱c少妇| 麻豆成人在线观看| 最新中文字幕亚洲| 亚洲二区免费| 欧美激情一区二区三区在线视频观看 | 日韩一级大片在线| 亚洲精品美女久久久久| 欧美日本在线播放| 亚洲一区二区三区午夜| 一本色道久久综合亚洲精品不 | 亚洲精品色婷婷福利天堂| 欧美精品一区二区三区视频| 一本色道久久精品| 99re热这里只有精品免费视频| 欧美亚洲成人网| 欧美一级久久久久久久大片| 亚洲欧美日韩区| 国内一区二区三区| 欧美成黄导航| 欧美日韩国产va另类| 午夜久久黄色| 久久精品一区四区| 亚洲日韩欧美视频一区| 日韩一级黄色大片| 国产精品羞羞答答| 开心色5月久久精品| 欧美韩日亚洲| 亚洲女性喷水在线观看一区| 欧美一区二区三区在线视频| 在线国产精品播放| 亚洲欧洲精品一区二区三区波多野1战4| 欧美日韩国产在线| 欧美在线播放| 美国十次了思思久久精品导航| 日韩午夜精品视频| 亚洲欧美国产高清| 亚洲狠狠婷婷| 亚洲午夜高清视频| 在线国产欧美| 99av国产精品欲麻豆| 国产日韩一区二区| 亚洲国产国产亚洲一二三| 国产精品成人一区二区艾草| 久久久久久一区| 欧美日本韩国| 久久久久久有精品国产| 欧美精品一区二区三区在线看午夜 | 欧美日产国产成人免费图片| 午夜在线观看免费一区| 久久全国免费视频| 亚洲淫性视频| 久久综合成人精品亚洲另类欧美| 日韩一级免费观看| 西西裸体人体做爰大胆久久久| 亚洲区一区二| 欧美一级视频免费在线观看| 99精品热6080yy久久| 久久av一区二区三区漫画| 99精品欧美| 久久嫩草精品久久久精品一| 亚洲综合色激情五月| 你懂的视频一区二区| 久久爱www| 欧美日韩亚洲91| 欧美xx视频| 国产精品综合网站| 亚洲另类自拍| 亚洲国产另类久久精品| 亚洲欧美综合国产精品一区| 夜色激情一区二区| 久久夜色精品国产欧美乱| 性欧美xxxx大乳国产app| 欧美激情精品久久久久久大尺度 | 国产欧美日韩一区二区三区| 亚洲国产毛片完整版| 激情av一区| 亚洲免费小视频| 亚洲午夜高清视频| 欧美电影资源| 欧美刺激性大交免费视频| 国产亚洲精品久久久久动| 一本色道久久| 一本色道久久| 欧美激情91| 欧美激情久久久久| 韩日成人av| 欧美一区二区黄| 欧美一区二区三区四区夜夜大片| 欧美日韩一区二区在线观看| 亚洲国产另类精品专区| 在线观看视频一区二区| 欧美一区二区网站| 欧美中文字幕在线观看| 国产精品伦子伦免费视频| 99热在这里有精品免费| 一本色道久久综合亚洲精品不 | 亚洲天天影视| 亚洲一级二级| 欧美三区在线观看| 日韩视频免费看| 夜夜狂射影院欧美极品| 欧美金8天国| 亚洲日本成人网| 99精品国产一区二区青青牛奶| 欧美va亚洲va国产综合| 欧美激情亚洲国产| 亚洲免费成人| 欧美日韩国产限制|