CreateEvent相关

1、HANDLE CreateEvent(
  LPSECURITY_ATTRIBUTES lpEventAttributes, 
  BOOL bManualReset, 
  BOOL bInitialState, 
  LPTSTR lpName 
); 创建新的事件对象,返回其句柄
lpEventAttributes: 构造体SECURITY_ATTRIBUTES的指针,表示新创建的事件对象的安全属性。如果为NULL时表示为默认安全属性。
bManualReset:创建的事件对象是否为人工重置还是自动重置,true为人工重置;false为自动重置。
bInitialState: true为事件对象的初始化为有信号状态,false为事件对象初始化为无信号状态。
lpName: 事件对象的名称,如为NULL则是匿名事件。

2、BOOL SetEvent(HANDLE hEvent); 将一个事件对象设为有信号状态。

hEvent: 需要进行设置的事件对象的句柄。

3、BOOL ResetEvent(HANDLE hEvent); 讲一个事件对象设为无信号状态。

hEvent: 需要进行设置的事件对象的句柄。

4、DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);等待具体事件的发生,即事件对象转为有信号状态

hHandle:所等待的事件对象的句柄

dwMilliseconds:等待时间长短,值为时INFINITE为永久等待。

 1 #include <cstdio>
 2 #include <windows.h>
 3 
 4 using namespace std;
 5 
 6 DWORD WINAPI myfun1(LPVOID lpParameter);
 7 DWORD WINAPI myfun2(LPVOID lpParameter);
 8 
 9 HANDLE hevent;
10 int a = 0;
11 
12 int main()
13 {
14     hevent = ::CreateEvent(NULL, FALSE, true, NULL);
15     HANDLE h1, h2;
16     h1 = ::CreateThread(NULL, 0, myfun1, NULL, 0, NULL);
17     printf("线程1开始运行!!\n");
18     h2 = ::CreateThread(NULL, 0, myfun2, NULL, 0, NULL);
19     printf("线程2开始运行!!\n");
20     ::Sleep(1000);
21     ::CloseHandle(h1);
22     ::CloseHandle(h2);
23     return 0;
24 }
25 
26 DWORD WINAPI myfun1(LPVOID lpParameter)
27 {
28     while(1)
29     {
30         ::WaitForSingleObject(hevent, INFINITE);
31         ::ResetEvent(hevent);
32         ++a;
33         printf("线程1正在运行:%d\n", a);
34         ::SetEvent(hevent);
35         ::Sleep(100);
36     }
37     return 0;
38 }
39 
40 DWORD WINAPI myfun2(LPVOID lpParameter)
41 {
42     while(1)
43     {
44         ::WaitForSingleObject(hevent, INFINITE);
45         ::ResetEvent(hevent);
46         ++a;
47         printf("线程2正在运行:%d\n", a);
48         ::SetEvent(hevent);
49         ::Sleep(100);
50     }
51     return 0;
52 }
posted @ 2012-05-29 21:10  mywe  阅读(230)  评论(0编辑  收藏  举报