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

牽著老婆滿街逛

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

內核式線程同步之waitable timer

轉載自:http://zouxiaochuan.bokee.com/3227203.html

waitable timer
      
顧名思義,就是隔一段時間被signaled的一種內核對象。waitable timer跟event對象一樣可以在創建的時候指定reset方式,如果是manual-reset,那么當waitable timer對象被signaled時,所有等待這個對象的wait函數都會返回。如果是auto-reset那么就只有一個wait函數會返回。

創建完waitable timer對象后,必須通過SetWaitableTimer函數對它進行時間上的設置。時間格式是個問題,看下面代碼

// Declare our local variables.
HANDLE hTimer;
SYSTEMTIME st;
FILETIME ftLocal, ftUTC;
LARGE_INTEGER liUTC;

// Create an auto-reset timer.
hTimer = CreateWaitableTimer(NULL, FALSE, NULL);

// First signaling is at January 1, 2002, at 1:00 P.M. (local time).
st.wYear         = 2002// Year
st.wMonth        = 1;    // January
st.wDayOfWeek    = 0;    // Ignored
st.wDay          = 1;    // The first of the month
st.wHour         = 13;   // 1PM
st.wMinute       = 0;    // 0 minutes into the hour
st.wSecond       = 0;    // 0 seconds into the minute
st.wMilliseconds = 0;    // 0 milliseconds into the second

SystemTimeToFileTime(
&st, &ftLocal);

// Convert local time to UTC time.
LocalFileTimeToFileTime(&ftLocal, &ftUTC);
// Convert FILETIME to LARGE_INTEGER because of different alignment.
liUTC.LowPart  = ftUTC.dwLowDateTime;
liUTC.HighPart 
= ftUTC.dwHighDateTime;

// Set the timer.
SetWaitableTimer(hTimer, &liUTC, 6 * 60 * 60 * 1000, NULL, NULL, FALSE);

 

上面的代碼查下MSDN應該很容易理解,這里要說的是CPU對齊的問題。FILETIME結構必須位于32位邊界,而LARGE_INTEGER必須位于64位邊界,所以不能將FILETIME直接傳給SetWaitableTimer。

SetWaitableTimer也可以使用時間的絕對值,或者使用相對時間值。不過這時的值必須是負的??聪旅娲a:

// Declare our local variables.
HANDLE hTimer;
LARGE_INTEGER li;

// Create an auto-reset timer.
hTimer = CreateWaitableTimer(NULL, FALSE, NULL);

// Set the timer to go off 5 seconds after calling SetWaitableTimer.
// Timer unit is 100-nanoseconds.
const int nTimerUnitsPerSecond = 10000000;

// Negate the time so that SetWaitableTimer knows we 
// want relative time instead of absolute time.
// This indicate that the timer will be signaled 5 seconds after the call to SetWaitableTimer
li.QuadPart = -(5 * nTimerUnitsPerSecond); 
 
// Set the timer.
SetWaitableTimer(hTimer, &li, 6 * 60 * 60 * 1000, NULL, NULL, FALSE);

清除waitable timer對象需要用到CancelWaitableTimer函數。

特別提出的是waitable timer這節引出了一個新概念:APC(asynchronous procedure call)。按照我的理解,APC應該是線程特有的一個隊列,里面裝的是函數地址。如果一個函數地址被裝入APC,如果這時線程處于待命的等待狀態(alertable wait),那么這個線程就會被喚醒去調用APC里的函數;否則,APC里的函數地址就會被忽略掉。這里的這個線程指的是調用SetWaitableTimer的線程。下面的代碼能說明問題

VOID APIENTRY TimerAPCRoutine(PVOID pvArgToCompletionRoutine,
   DWORD dwTimerLowValue, DWORD dwTimerHighValue) 
{

   FILETIME ftUTC, ftLocal;
   SYSTEMTIME st;
   TCHAR szBuf[
256];

   
// Put the time in a FILETIME structure.
   ftUTC.dwLowDateTime = dwTimerLowValue;
   ftUTC.dwHighDateTime 
= dwTimerHighValue;

   
// Convert the UTC time to the user's local time.
   FileTimeToLocalFileTime(&ftUTC, &ftLocal);

   
// Convert the FILETIME to the SYSTEMTIME structure
   
// required by GetDateFormat and GetTimeFormat.
   FileTimeToSystemTime(&ftLocal, &st);

   
// Construct a string with the 
   
// date/time that the timer went off.
   GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, 
      
&st, NULL, szBuf, sizeof(szBuf) / sizeof(TCHAR));
   _tcscat(szBuf, _ _TEXT(
" "));
   GetTimeFormat(LOCALE_USER_DEFAULT, 
0,
      
&st, NULL, _tcschr(szBuf, 0), 
      
sizeof(szBuf) / sizeof(TCHAR) - _tcslen(szBuf));

   
// Show the time to the user.
   MessageBox(NULL, szBuf, "Timer went off at", MB_OK);
}


void SomeFunc() {
   
// Create a timer. (It doesn't matter whether it's manual-reset 
   
// or auto-reset.)
   HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);

   
// Set timer to go off in 5 seconds.
   LARGE_INTEGER li = 0 };
   SetWaitableTimer(hTimer, 
&li, 5000, TimerAPCRoutine, NULL, FALSE);

   
// Wait in an alertable state for the timer to go off.
   SleepEx(INFINITE, TRUE);

   CloseHandle(hTimer);
}

如果指定了APC,那么就不要等待這個waitable timer對象了,因為APC隊列會喚醒線程的,不需要wait函數。

posted on 2011-06-02 17:25 楊粼波 閱讀(1137) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品视频免费| 国产精品成av人在线视午夜片| 欧美在线欧美在线| 在线亚洲欧美视频| 亚洲精品视频二区| 99国产麻豆精品| 亚洲图片欧洲图片日韩av| 亚洲少妇诱惑| 欧美激情在线免费观看| 欧美精品色网| 国产日韩欧美视频在线| 国产综合自拍| 亚洲午夜在线视频| 久久久国际精品| 亚洲第一二三四五区| 嫩草国产精品入口| 亚洲人成7777| 久久成人精品无人区| 欧美福利专区| 精品动漫3d一区二区三区| 一二美女精品欧洲| 久久―日本道色综合久久| 亚洲乱码视频| 久久综合给合| 国语自产精品视频在线看| 亚洲一区二区少妇| 91久久国产精品91久久性色| 亚洲一区二区三区四区五区黄| 久久人人97超碰精品888| 国产精品毛片在线看| 亚洲靠逼com| 欧美国产先锋| 欧美大香线蕉线伊人久久国产精品| 国产精品久久久久久久9999 | 欧美顶级艳妇交换群宴| 午夜老司机精品| 国产日韩精品久久| 欧美一区日韩一区| 午夜精品剧场| 国内精品伊人久久久久av一坑| 午夜在线成人av| 亚洲欧美日韩精品一区二区| 在线亚洲成人| 国产视频在线观看一区二区三区| 亚洲男同1069视频| 欧美一区二区三区在| 国产一区二区三区成人欧美日韩在线观看 | 日韩视频专区| 欧美亚州韩日在线看免费版国语版| 在线亚洲高清视频| 欧美亚洲视频一区二区| 国自产拍偷拍福利精品免费一| 久久女同互慰一区二区三区| 美女亚洲精品| 亚洲欧美日韩综合| 国产精品二区二区三区| 久久成人人人人精品欧| 久久精品国亚洲| 亚洲日本成人在线观看| 亚洲影院污污.| 99视频在线精品国自产拍免费观看 | 国内自拍视频一区二区三区| 乱中年女人伦av一区二区| 欧美片网站免费| 久久久99爱| 欧美日韩在线另类| 久久久青草婷婷精品综合日韩| 麻豆91精品| 久久久久国产精品厨房| 欧美日韩精品国产| 亚洲国产精品电影在线观看| 久久不见久久见免费视频1| 久久综合色一综合色88| 欧美一区二区三区男人的天堂 | 欧美一区二区三区四区在线| 欧美99在线视频观看| 在线成人免费视频| 亚洲欧美激情诱惑| 亚洲午夜一区二区| 欧美日韩精品免费在线观看视频| 免费在线看成人av| 亚洲动漫精品| 欧美激情久久久久| 亚洲精品综合在线| 国产精品国产馆在线真实露脸| 亚洲福利专区| 一区二区三区高清视频在线观看| 久久综合色天天久久综合图片| 女人色偷偷aa久久天堂| 亚洲激情不卡| 国产精品qvod| 久久在线观看视频| 亚洲精品国产拍免费91在线| 亚洲欧美日韩国产综合在线 | 久久久久久噜噜噜久久久精品| 亚洲免费成人av| 国产精品影视天天线| 欧美在线观看一二区| 欧美成人网在线| 欧美亚洲一区在线| 亚洲精选中文字幕| 国产午夜精品麻豆| 欧美日韩在线一区二区| 久久av在线| 999亚洲国产精| 黄色亚洲免费| 国产偷自视频区视频一区二区| 亚洲美女福利视频网站| 中文欧美在线视频| 亚洲国产婷婷| 欧美激情aaaa| 欧美+亚洲+精品+三区| 欧美一区二区三区免费观看视频| 最新日韩在线| 亚洲国产精品久久久久秋霞不卡| 国产精品嫩草影院av蜜臀| 欧美成人四级电影| 久久久最新网址| 老色鬼久久亚洲一区二区| 欧美一区91| 久久久美女艺术照精彩视频福利播放 | 欧美va亚洲va香蕉在线| 老色鬼久久亚洲一区二区| 另类欧美日韩国产在线| 欧美xart系列在线观看| 欧美激情精品久久久久久| 巨乳诱惑日韩免费av| 国产伦精品一区二区三| 亚洲精品国产品国语在线app| 欧美国产日韩亚洲一区| 欧美不卡视频一区发布| 欧美成人综合| 亚洲精品一线二线三线无人区| 日韩视频一区二区三区在线播放| 99视频+国产日韩欧美| 亚洲新中文字幕| 欧美一区二区三区在线视频 | 91久久精品日日躁夜夜躁欧美 | 亚洲综合色丁香婷婷六月图片| 久久亚洲一区二区三区四区| 欧美一区二区三区精品| 欧美在线3区| 巨乳诱惑日韩免费av| 亚洲精品中文字幕女同| 久久国产欧美日韩精品| 欧美日韩国产首页| 一区二区三区在线观看欧美| 亚洲一区尤物| 国产日韩欧美在线播放不卡| 日韩视频在线播放| 久久精品人人| 久久精品欧洲| 亚洲性人人天天夜夜摸| 亚洲一区免费视频| 久久9热精品视频| 国产午夜精品理论片a级探花 | 欧美一级电影久久| 国产精品国产a级| 国内成人精品视频| 亚洲国产视频a| 欧美77777| 日韩亚洲欧美在线观看| 久久久欧美精品| 久久国产欧美日韩精品| 国产精品一卡二| 久久精品视频在线看| 久久狠狠久久综合桃花| 亚洲大胆av| 亚洲精品一二区| 国产精品久久久久久久浪潮网站| 亚洲视频一区二区| 午夜欧美电影在线观看| 国产精品国产亚洲精品看不卡15| 国产精一区二区三区| 国产精品免费福利| 欧美亚洲免费电影| 国产人成一区二区三区影院| 久久亚洲国产成人| 欧美激情一区在线| 欧美在线中文字幕| 欧美极品aⅴ影院| 欧美一区影院| 欧美日产一区二区三区在线观看| 欧美中文在线字幕| 欧美日韩一区二区在线观看视频| 久久精品理论片| 欧美日韩综合不卡| 欧美成人在线网站| 在线观看亚洲精品| 新片速递亚洲合集欧美合集| 国产亚洲欧美一区在线观看| 99精品国产在热久久| 亚洲第一精品在线| 欧美一级精品大片| 性做久久久久久| 国产乱肥老妇国产一区二| 一本色道久久综合亚洲精品不| 亚洲精品视频一区| 欧美日韩国产在线观看| 亚洲欧洲日韩在线|