利用单事件对象进行线程同步
2013-04-01 16:52
375 查看
按书上的代码调不出来,无错,但是空白。
于是,我只好加了一个WaitSingleObject,
结果,只能显示截断的字符,于是调协好 Character Set,才一切OK。
线程间同步,进程间通信,内存分配。这差不多算是系统编程的三大重点了。
涉及了内存,CPU。
于是,我只好加了一个WaitSingleObject,
结果,只能显示截断的字符,于是调协好 Character Set,才一切OK。
线程间同步,进程间通信,内存分配。这差不多算是系统编程的三大重点了。
涉及了内存,CPU。
/* ************************************ *《精通Windows API》 * 示例代码 * Event.c * 7.2.1 演示使用Event同步线程 **************************************/ /* 头文件 */ #include <windows.h> #include <stdio.h> /* 常量定义 */ #define NUMTHREADS 3 #define BUFFER_SIZE 16 #define FOR_TIMES 5 /* 全局变量 */ HANDLE hEvent; HANDLE hThread; // 用于同步 BYTE lpSharedBuffer[16] = {0}; // 共享内存 /* 函数声明 */ void UseEvents(void); DWORD WINAPI EventFunction(LPVOID lpParam); /************************************* * int main(void) * 功能 演示 * * 参数 未使用 **************************************/ int main() { UseEvents(); WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); } /************************************* * 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(200); // 可以做一些其他处理 // 向共享内存中复制数据 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); printf("\nlpSharedBuffer"); // 重置事件 if (! ResetEvent(hEvent) ) { printf("SetEvent failed (%d)\n", GetLastError()); return 0; } return 1; }
相关文章推荐
- 利用事件对象实现线程同步
- Windows核心编程学习九:利用内核对象进行线程同步
- Windows核心编程学习九:利用内核对象进行线程同步
- Windows-核心编程-09-如何用内核对象进行线程同步-事件内核对象
- 多线程编程Demo[利用事件对象实现线程同步]
- 利用事件对象实现线程同步
- 利用事件对象实现线程同步
- 利用事件对象实现线程同步
- 利用事件对象实现线程同步
- <<Windows核心编程(第五版)>>第九章用内核对象进行线程同步:9.3事件内核对象
- 利用事件对象 实现线程同步
- windows多线程系列003_利用事件对象实现线程同步
- 第9章 用内核对象进行线程同步(1)_事件对象(Event)
- 线程同步之事件对象(类比互斥对象进行分析)
- 完成将vc利用word对象的排序功能对输入的汉字进行排序
- C++并行编程(一): 利用C++标准库实现仿Windows内核事件对象
- 利用IHttpModule及Session_End事件进行在线会员统计遇到的问题
- [C++] socket - 6 [API互斥事件对象实现线程同步]
- 事件对象实现线程同步
- 利用事件实现线程同步