多线程-事件机制

来源:互联网 发布:vb外接程序管理器 编辑:程序博客网 时间:2024/05/16 07:38

多线程-事件机制:

即线程B的启动需要等待线程A的某个信号,如果等待到信息则开始执行,代码如下,摘自《精通Windows API》 :

/* *************************************《精通Windows API》 * 示例代码* Event.c* 7.2.1  演示使用Event同步线程**************************************//* 头文件 */#include <windows.h>#include <stdio.h>/* 常量定义 */#define NUMTHREADS3 #define BUFFER_SIZE16#define FOR_TIMES5/* 全局变量 */HANDLE hEvent;// 用于同步BYTE lpSharedBuffer[16] = {0};// 共享内存/* 函数声明 */void UseEvents(void);DWORD WINAPI EventFunction(LPVOID lpParam);/************************************** int main(void)* 功能演示** 参数未使用**************************************/int main(){UseEvents();}/************************************** void UseEvents(void) * 功能演示Event的使用方法** 参数未使用**************************************/void UseEvents(void) {HANDLE hThread; hEvent = CreateEvent( NULL,// 默认安全属性TRUE,// 手工重置FALSE,// 初始为未置位的NULL// 未命名);// 判断是否创建成功if (hEvent == NULL) { printf("CreateEvent failed (%d)\n", GetLastError());return;}// 创建线程hThread = CreateThread(NULL, 0, EventFunction, NULL,0, NULL); if (hThread == NULL) {printf("CreateThread failed (%d)\n", GetLastError());return;}Sleep(2000); // 可以做一些其他处理// 向共享内存中复制数据CopyMemory(lpSharedBuffer,"Event",lstrlen("Event"));// 设置 Event 使ThreadFunction线程可以开始复制数据SetEvent(hEvent);}/************************************** DWORD WINAPI EventFunction(LPVOID lpParam)* 功能线程函数,读共享内存** 参数未使用**************************************/DWORD WINAPI EventFunction(LPVOID lpParam) {DWORD dwWaitResult;// 等待,直到事件被置位dwWaitResult = WaitForSingleObject( hEvent,// Event 句柄INFINITE);// 无限等待if (dwWaitResult != WAIT_OBJECT_0) {printf("Wait error: %d\n", GetLastError()); return 0;}// 读共享内存printf(lpSharedBuffer);// 重置事件if (! ResetEvent(hEvent) ) { printf("SetEvent failed (%d)\n", GetLastError());return 0;}return 1;}


0 0
原创粉丝点击