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

我的玻璃盒子

(轉帖)Windows同步API (二)—— Event

原文鏈接:http://m.shnenglu.com/wangjt/archive/2008/02/01/42312.html

  Event即事件是一種用于進行線程/進程間同步的對象,事件有置位和復位兩種狀態,當線程通過waiting functions等待Event對象置位時該線程將進入阻塞狀態,當該Event對象被置位或等待超時后,等待的線程將恢復執行。Event可以用在一個線程要等待其它線程時。
可以使用CreateEvent創建Event對象
HANDLE WINAPI CreateEvent(
    LPSECURITY_ATTRIBUTES lpEventAttributes,
    BOOL bManualReset,
    BOOL bInitialState,
    LPCTSTR lpName
);
lpEventAttributes用于指定Event對象的安全屬性,包括句柄是否可被子進程繼承和對象的安全描述符??稍O置NULL取默認安全屬性。
bManualReset表明Event對象是否需要手動復位。如果該參數為TRUE,則Event對象需要通過ResetEvent函數手動復位。如果該參數為FALSE,則Event被創建為自動復位的Event,任何等待的線程被恢復執行后,該Event將被系統自動復位。打個比方,如果有10個線程在等待一個Event,這時將Event置位,如果這是個手動復位Event,那么這10個線程將被依次喚醒直到通過ResetEvent調用將該Event復位;如果Event為自動復位Event,那么10個線程中的第一個被喚醒后Event被自動復位,其它線程將繼續等待。
bInitialState參數表明Event對象被創建后默認是否置位。
lpName參數是Event的名字,可以為空表明將創建匿名Event。
CreateEvent函數在調用成功后返回Event句柄。如果同名Event已經存在,則返回這個已經存在了的Event的句柄,此時調用GetLastError函數將返回 ERROR_ALREADY_EXISTS。
還可以通過OpenEvent打開一個已經創建的非匿名Event
HANDLE WINAPI OpenEvent(
    DWORD dwDesiredAccess,
    BOOL bInheritHandle,
    LPCTSTR lpName
);
在創建或打開了Event對象之后,可以使用SetEvent和ResetEvent函數來置位或復位一個Event對象。
BOOL WINAPI SetEvent(
    HANDLE hEvent
);
BOOL WINAPI ResetEvent(
    HANDLE hEvent
);
要等待一個或多個Event對象置位可以使用wait functions。
簡單示例,一個線程不停讀取用戶輸入并放入message列表,另一個線程模擬將message發送出去,如果沒有消息,則發送線程處于阻塞狀態等待,一旦有消息錄入,輸入線程將event置位,發送線程即被激活并逐個發送消息。
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <list>
#include <string>
using namespace std;

#ifdef _UNICODE
typedef wstring tstring;
#define tcout wcout
#define tcin wcin
#else
typedef string tstring;
#define tcout cout
#define tcin cin
#endif /* _UNICODE */

typedef list<tstring> StringList;

HANDLE hMutex = NULL;
HANDLE hEvent = NULL;
HANDLE hSendThread = NULL;
StringList messages;

bool isRunning;

DWORD WINAPI SendThreadProc(LPVOID lpThreadParameter)
{
DWORD dw;
while(isRunning)
{
  dw = WaitForSingleObject(hEvent, INFINITE);
  if(dw != WAIT_OBJECT_0)
  {
   tcout << _T("Wait error.") << endl;
   return -1;
  }
  dw = WaitForSingleObject(hMutex, INFINITE);
  if(WAIT_OBJECT_0 != dw && WAIT_ABANDONED != dw)
  {
   tcout << _T("Wait error.") << endl;
   return -2;
  }

  StringList list(messages);
  messages.clear();

  ReleaseMutex(hMutex);

  for(StringList::iterator i = list.begin(); i != list.end(); i++)
  {
   Sleep(1000); //休眠1秒模擬發送所耗時間

   tcout << _T("/* Send Message:") << *i << _T(" */");
  }

}

return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
hMutex = CreateMutex(NULL, FALSE, NULL);
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
isRunning = true;

hSendThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SendThreadProc, NULL, 0, NULL);

while(isRunning)
{
  tstring s;
  tcin >> s;
  if(s == _T("quit"))
  {
   isRunning = true;
   break;
  }

  DWORD dw = WaitForSingleObject(hMutex, INFINITE);
  if(WAIT_OBJECT_0 != dw && WAIT_ABANDONED != dw)
  {
   tcout << _T("Wait error.") << endl;
   return -1;
  }
  messages.push_back(s);
  ReleaseMutex(hMutex);
  SetEvent(hEvent);
}

CloseHandle(hMutex);
CloseHandle(hEvent);
CloseHandle(hSendThread);

return 0;

}

posted on 2008-02-03 10:44 深藍色系統 閱讀(597) 評論(0)  編輯 收藏 引用 所屬分類: Windows開發

導航

<2008年2月>
272829303112
3456789
10111213141516
17181920212223
2425262728291
2345678

統計

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 国模一区二区三区| 欧美主播一区二区三区美女 久久精品人| 午夜精品理论片| 欧美日一区二区在线观看| 蜜桃精品久久久久久久免费影院| 香蕉乱码成人久久天堂爱免费 | 亚洲国产日本| 午夜激情一区| 亚洲精品一区二区三区不| 国产偷自视频区视频一区二区| 久久一区中文字幕| 快射av在线播放一区| 一区二区三区国产在线| 亚洲精品韩国| 亚洲精品在线免费| 亚洲国产福利在线| 欧美国产一区二区| 美女视频一区免费观看| 久久成人18免费网站| 欧美一级免费视频| 久久激五月天综合精品| 欧美伊人久久大香线蕉综合69| 午夜激情亚洲| 久久久久久夜精品精品免费| 欧美亚洲综合久久| 国产伪娘ts一区| 国产日本欧美一区二区三区在线 | 亚洲综合电影| 久久精品99国产精品| 欧美一区二区精品久久911| 欧美怡红院视频| 欧美成人午夜视频| 香蕉久久精品日日躁夜夜躁| 欧美制服丝袜第一页| 在线观看日韩一区| 亚洲欧美日韩精品在线| 久久综合色播五月| 亚洲麻豆视频| 欧美成人精品| 欧美揉bbbbb揉bbbbb| 欧美黄色免费| 亚洲素人在线| 亚洲在线视频| 欧美中文字幕视频| 亚洲女人天堂av| 亚洲精品日韩久久| 日韩一级黄色av| 亚洲国产欧美在线人成| 欧美精品一区二区三区高清aⅴ| 久久国产精品亚洲77777| 亚洲国产另类精品专区| 激情视频一区二区三区| 欧美日韩亚洲系列| av成人老司机| 亚洲综合精品自拍| 欧美国产高清| 免费成人高清| 亚洲另类在线一区| 99在线精品视频| 亚洲国产天堂久久综合网| 亚洲国内自拍| 亚洲免费成人av| 国产精品ⅴa在线观看h| 亚洲伊人网站| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美风情在线观看| 亚洲国产精品成人va在线观看| 亚洲视频一二三| 午夜亚洲福利| 一区在线观看视频| 99伊人成综合| 亚洲欧洲三级电影| 午夜精品久久久久久久久久久久久 | 欧美bbbxxxxx| 亚洲午夜精品久久久久久浪潮| 亚洲一区二区三区精品在线观看 | 亚洲视频中文| 最新成人av在线| 午夜精品在线视频| 欧美韩国日本一区| 老司机免费视频久久| 欧美天天在线| 亚洲欧洲精品成人久久奇米网| 亚洲风情亚aⅴ在线发布| 国产精品免费一区二区三区在线观看| 久久精品视频在线| 国产一区深夜福利| 欧美激情第一页xxx| 樱桃视频在线观看一区| 亚洲一区二区久久| 欧美在线观看网址综合| 国产精品人人爽人人做我的可爱| 久久久久成人精品| 欧美了一区在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 韩日视频一区| 欧美国产精品v| 日韩视频不卡| 午夜精品美女自拍福到在线| 国产精品少妇自拍| 香蕉成人啪国产精品视频综合网| 久久精品国产在热久久| 国产日韩欧美在线一区| 久久久综合网| 亚洲天堂成人在线观看| 欧美在线播放一区| 欧美剧在线免费观看网站| 亚洲精品乱码久久久久久黑人| 日韩午夜免费| 国产欧美日韩在线| 欧美国产日韩视频| 亚洲成人自拍视频| 久久福利视频导航| 国产欧美午夜| 另类天堂av| 久久精品在线播放| 亚洲欧美日韩中文在线制服| 亚洲第一在线综合网站| 狠狠狠色丁香婷婷综合激情| 欧美激情综合亚洲一二区| 久久精品亚洲精品国产欧美kt∨| 先锋影音国产精品| 浪潮色综合久久天堂| 亚洲欧美在线x视频| 国内久久婷婷综合| 国产日韩亚洲| 国产一区二区三区av电影| 亚洲欧美国内爽妇网| 亚洲精品国精品久久99热| 亚洲午夜激情免费视频| 亚洲精品在线视频观看| 欧美成人在线影院| 男人的天堂亚洲| 久久久久久久一区二区| 久久成年人视频| 免费黄网站欧美| 亚洲国产欧美一区二区三区丁香婷| 久久一综合视频| 欧美成人影音| 午夜久久99| 久热精品视频在线观看一区| 免费日韩av片| 日韩视频亚洲视频| 性欧美18~19sex高清播放| 欧美精品在线观看播放| 国产精品日韩专区| 亚洲欧洲日产国产综合网| 亚洲视频免费在线观看| 久久aⅴ乱码一区二区三区| 嫩草国产精品入口| 亚洲免费影视第一页| 久久综合一区二区| 国产专区综合网| 性欧美长视频| 亚洲一区免费网站| 国产日韩精品视频一区二区三区| 亚洲精品一级| 亚洲日本欧美天堂| 久久九九热re6这里有精品 | 欧美日韩免费一区| 中文亚洲字幕| 亚洲一区二区网站| 欧美大胆成人| 国产精品试看| 久久九九免费视频| 久久国产精品99久久久久久老狼| 欧美激情一区二区| 国产性做久久久久久| 美女精品网站| 亚洲影音一区| 国内精品久久久| 欧美高清不卡| 亚洲无线视频| 西西裸体人体做爰大胆久久久| 国产欧美精品日韩精品| 久久久精品五月天| 欧美日韩亚洲一区二区三区在线观看 | 国产精一区二区三区| 免费成人黄色av| 欧美福利视频在线观看| 亚洲自拍偷拍福利| 亚洲婷婷在线| 亚洲国产美女精品久久久久∴| 亚洲精品一区二区三区四区高清| 欧美午夜精品| 99视频精品免费观看| 国内精品模特av私拍在线观看| 亚洲高清视频的网址| 国产日韩亚洲欧美综合| 亚洲国产一区二区a毛片| 欧美高清自拍一区| 亚洲精品一品区二品区三品区| 国产欧美精品日韩区二区麻豆天美| 久热国产精品视频|