windows 核心編程之9 核心對象用於線程同步

來源:互聯網
上載者:User
  核心對象用於線程同步
這個是我QQ裡面寫的一篇核心對象同步的文章 http://user.qzone.qq.com/276907985/blog/1372851189
1 事件核心對象 包含3個資料結構:1 引用計數 2 自動還是手動的BOOL值 3 是否觸發的布爾值

手動事件和自動事件 當自動事件被觸發時,只有一個正在等待的線程被調度 當手動事件被觸發時,所以等待它的線程都被調度
 CreateEvent 是一個宏,一個是CreateEventA和CreateEventW
HANDLE
WINAPI
CreateEvent(
    __in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,
    __in     BOOL bManualReset,
    __in     BOOL bInitialState,
    __in_opt LPCTR lpName
    );
參數1 表示安全屬性 參數2 True表示手動事件,False表示自動事件 參數3 True表示觸發狀態,False表示沒有觸發 參數4 一個NULL字元結尾的字串,是一個名字
SetEvent  把事件變成觸發狀態 RssetEvent  把事件變成未觸發狀態
對於自動事件來說,不需要RssetEvent, WaitForSingleObject 等待函數會自動重設為未觸發狀態 手動事件,沒有等待成功的副作用
PulseEvent 會把事件置為觸發,然後馬上重設為未觸發 當自動事件時,只有當正在等待的一個線程會觸發 當手動事件時,只有正在等待的所以線程被觸發
#include <Windows.h>#include <stdio.h>#include <tchar.h>#include <process.h>#include <winbase.h>HANDLE hEventAuto = NULL;HANDLE hEventManual = NULL;unsigned int WINAPI ThreadFunc1(LPVOID lp){//手動事件WaitForSingleObject(hEventManual,INFINITE);printf("1 手動事件等到\n");return 0;}unsigned int WINAPI ThreadFunc2(LPVOID lp){//手動事件WaitForSingleObject(hEventManual,INFINITE);printf("2 手動事件等到\n");return 0;}unsigned int WINAPI ThreadFunc3(LPVOID lp){//自動事件 等待成功後,會自動把事件重設為未觸發,所以需要自己SetEventWaitForSingleObject(hEventAuto, INFINITE);SetEvent(hEventAuto);printf("3 等待自動事件\n");return 0;}unsigned int WINAPI ThreadFunc4(LPVOID lp){//自動事件WaitForSingleObject(hEventAuto, INFINITE);SetEvent(hEventAuto);printf("4 等待自動事件\n");return 0;}int main(){hEventAuto= CreateEvent(NULL, FALSE, FALSE, NULL);hEventManual= CreateEvent(NULL, TRUE, FALSE, NULL);HANDLE hThreadArray[10]; hThreadArray[0] = (HANDLE)_beginthreadex(NULL, 0,ThreadFunc1, NULL, 0, NULL); hThreadArray[1] = (HANDLE)_beginthreadex(NULL, 0,ThreadFunc2, NULL, 0, NULL); hThreadArray[2] = (HANDLE)_beginthreadex(NULL, 0,ThreadFunc3, NULL, 0, NULL); hThreadArray[3] = (HANDLE)_beginthreadex(NULL, 0,ThreadFunc4, NULL, 0, NULL);//手動事件需要自己設定觸發SetEvent(hEventManual);SetEvent(hEventAuto);WaitForMultipleObjects(4,hThreadArray,TRUE,INFINITE);getchar();return 0;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.