多线程通信——事件
来源:互联网 发布:内网端口转发工具 编辑:程序博客网 时间:2024/05/21 05:43
一共有两种不同的事件对象,分别是:
人工重置事件:得到通知时,等待该事件的所有线程都变为可调度线程
自动完成事件:得到通知时,等待该事件的所有线程只有一个变为可调度线程
相关函数主要包括:
HANDLE CreateEvent(
PSECURITY_ATTRIBUTES psa, //安全性参数
BOOL fManualReset, //人工重置事件True,自动重置事件False
BOOL fIntialState, //是不是初始化为已通知状态
PCTSTR pszName); //name
HANDLE OpenEvent(
DWORD fdwAccess, //事件的访问方式,一般为 EVENT_ALL_ACCESS
BOOL fInherit, //继承属性,true说明子进程可以继承该事件
PCTSTR pszName); //name
BOOL SetEvent(HANDLE hEvent); //将事件变为已通知状态
BOOL ResetEvent(HANDLE hEvent); //重置为未通知状态
程序实例:
程序的逻辑为:用户输入“c”,来控制线程的继续执行
DWORD WINAPI ThreadFuncEvent(PVOID pParam){HANDLE eventHan = OpenEvent( EVENT_ALL_ACCESS, true, L"EventTest" );WaitForSingleObject(eventHan, INFINITE);cout << "Thread get event, countinue" <<endl;return 0;}int main(){HANDLE hEvent = CreateEvent(NULL, false, false, L"EventTest");cout << "int main()" <<endl;HANDLE THandle = CreateThread(NULL, 0, ThreadFuncEvent, NULL, CREATE_SUSPENDED, NULL);cout << "Main Thread" <<endl;ResumeThread(THandle);string inputStr;while (true){cin >> inputStr;if ( inputStr == "c" ){SetEvent(hEvent);break;}}WaitForSingleObject(THandle, INFINITE);cout << "main End" <<endl;;CloseHandle(hEvent); return 0;}
- 多线程通信——事件
- C#——基于委托与事件的多线程通信(同样适用于非UI线程间通信)
- 多线程通信——互斥量
- 多线程通信——信号量
- 多线程——线程通信
- QT:多线程及通过事件进行通信
- c#多线程通信之委托(事件)
- c#多线程通信之委托(事件)
- c#多线程通信之委托(事件)
- 多线程通信——匿名管道
- 多线程通信——互锁函数
- 多线程通信——临界段
- 多线程通信——等待函数
- ZMQ——多线程通信(过程)
- java基础——多线程之间通信
- JAVA学习——多线程通信
- C#系列——多线程通信
- 多线程(5)—线程通信
- UVA 10132 File Fragmentation
- Android系统联系人全特效实现(上),分组导航和挤压动画
- Android中自定义属性(attrs.xml,TypedArray)的使用
- HttpClient 学习整理
- 安全完美终止线程大全,各种各样情况
- 多线程通信——事件
- upnp协议编程一
- 切面性服务——DRP项目中Filter的应用
- hadoop启动后进safemode不出来
- 字典树
- RobotFrameWork(三)数据类型
- hdu1333/poj1142-Smith Numbers
- JSON
- C++ list用法