SetEvent/ResetEvent
来源:互联网 发布:地震安全知识网络竞赛 编辑:程序博客网 时间:2024/05/17 08:35
在自动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时操作系统(待定)自动重置等待的事件对象(即自动将其设置为无信号状态。无论何时通过SetEvent发送过来的信号,只要未被接收到均不会被自动重置。但在未被接收之前可以调用ResetEvent手动重置等待的事件对象,此时等待的事件对象为无信号状态)。
在手动重置事件对象中,当WaitSingleObject/WaitForMultipleObjects接收到SetEvent发送过来的信号后则返回WAIT_OBJECT_0,此时需要调用ResetEvent手动重置等待的事件对象(即手动将其设置为无信号状态)。
- #include <windows.h>
- #include <iostream>
- using namespace std;
- DWORD WINAPI ThreadProc(LPVOID lpParam);
- DWORD WINAPI ThreadProc2(LPVOID lpParam);
- DWORD g_dwThreadID;
- DWORD g_dwThreadID2;
- UINT g_nTickets = 300;
- HANDLE g_hEvent = NULL;
- int main(int argc, char* argv[])
- {
- cout << "Main thread is running." << endl;
- HANDLE hHandle = CreateThread(NULL, 0, ThreadProc, NULL, 0, &g_dwThreadID);
- HANDLE hHandle2 = CreateThread(NULL, 0, ThreadProc2, NULL, 0, &g_dwThreadID2);
- CloseHandle(hHandle);
- CloseHandle(hHandle2);
- g_hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
- Sleep(4000);
- system("pause");
- return 0;
- }
- DWORD WINAPI ThreadProc(LPVOID lpParam)
- {
- // cout << "No." << g_dwThreadID << " thread is running." << endl;
- while (TRUE)
- {
- WaitForSingleObject(g_hEvent, INFINITE);
- if (g_nTickets > 0)
- {
- Sleep(1);
- cout << "No.1-" << g_dwThreadID << " sell ticket : " << g_nTickets << endl;
- g_nTickets--;
- SetEvent(g_hEvent);
- }
- else
- {
- break;
- }
- }
- return 0;
- }
- DWORD WINAPI ThreadProc2(LPVOID lpParam)
- {
- // cout << "No." << g_dwThreadID2 << " thread is running." << endl;
- while (TRUE)
- {
- WaitForSingleObject(g_hEvent, INFINITE);
- if (g_nTickets > 0)
- {
- Sleep(1);
- cout << "No.2-" << g_dwThreadID2 << " sell ticket : " << g_nTickets << endl;
- g_nTickets--;
- SetEvent(g_hEvent);
- }
- else
- {
- break;
- }
- }
- return 0;
- }
0 0
- SetEvent/ResetEvent
- SetEvent/ResetEvent
- SetEvent/ResetEvent
- SetEvent,ResetEvent
- SetEvent/ResetEvent
- 【CreateEvent与SetEvent/ResetEvent】
- CreateEvent、setevent、ResetEvent和WaitForSingleObject
- [转] MFC: ResetEvent、CreateEvent、SetEvent
- CreateEvent、SetEvent、ResetEvent和WaitForSingleObject
- CreateEvent/SetEvent/ResetEvent和WaitForSingleObject
- CreateEvent/SetEvent/ResetEvent和WaitForSingleObject
- c++中SetEvent和ResetEvent的使用
- CreateEvent() SetEvent() ResetEvent() 进程互斥
- SetEvent,ResetEvent、ReadDirectoryChangesW、WaitForSingleObject最优博文
- CreateEvent/OpenEvent/SetEvent/ResetEvent/WaitForSingleObject 相关用法说明
- CreateEvent/OpenEvent/SetEvent/ResetEvent/WaitForSingleObject 相关用法说明
- C++事件的建立和使用SetEvent,ResetEvent
- C++事件的建立和使用SetEvent,ResetEvent
- UITabbarViewController+Navigation框架下的子视图的跳转示例之一
- POJ 1276 Cash Machine(多重背包)
- Android的NDK开发(3)————JNI数据类型的详解
- 针对Xmodem的CRC校验代码
- Spring MVC实现跳转的几种方式
- SetEvent/ResetEvent
- android 学习笔记 发送有序的广播
- webview加载应用宝 网页版界面,简单实现
- EXT JS中如何设置应用的主题
- Android的NDK开发(4)————JNI数据结构之JNINativeMethod
- test
- 获取视频帧图片
- 选择合适加密软件的6大要素
- 遗传算法_C语言