C++ 多线程资源互斥锁与信号量
#include "windows.h" #include "process.h" #include "stdio.h" #include "stdlib.h" #include "winuser.h" //创建信号量 HANDLE signl = 0; //创建锁 CRITICAL_SECTION section; //资源互斥锁 unsigned _stdcall threadPool(VOID* e) { //加锁 EnterCriticalSection(§ion); for (size_t i = 0; i < 16; i++) { //SendMessage((HWND)0x00C60090, CB_SHOWDROPDOWN, 1, 0); //向窗口发送信息 SendMessage((HWND)e,WM_PASTE, 0,0); //PostMessage((HWND)0x00C60090,WM_PASTE, NULL, NULL); }; //释放锁 LeaveCriticalSection(§ion); return 0; }; //信号量 unsigned _stdcall SignlThreadPool(VOID* e) { printf("%d等待中...!\n", &e); //等待信号量 WaitForSingleObject(signl, INFINITE); printf("%d启动了!\n", &e); for (size_t i = 0; i < 16; i++) { //SendMessage((HWND)0x00C60090, CB_SHOWDROPDOWN, 1, 0); PostMessage((HWND)e, WM_PASTE, 0, 0); Sleep(100); //PostMessage((HWND)0x00C60090,WM_PASTE, NULL, NULL); }; return 0; }; //主窗口 int main(int argc,TCHAR* argv[]) { HWND hnd[4]; hnd[0] = (HWND)0x00C60090; hnd[1] = (HWND)0x0034071E; hnd[2] = (HWND)0x004A084C; hnd[3] = (HWND)0x007E03C0; //初始化资源互斥锁 InitializeCriticalSection(§ion); //创建信号量 signl = CreateEvent(NULL, TRUE, FALSE, NULL); // HANDLE hndle[4]; //循环创建线程 for (size_t i = 0; i < 4; i++) { //hndle[i] = (HANDLE)_beginthreadex(NULL, NULL, threadPool, hnd[i], NULL, 0); //获取创建的线程 hndle[i]=(HANDLE)_beginthreadex(NULL, NULL, SignlThreadPool, hnd[i], NULL, 0); }; //休眠3秒 Sleep(3000); //打开信号量 SetEvent(signl); //等待线程执行完毕 for (size_t i = 0; i < 4; i++) { WaitForSingleObject(hndle[i],INFINITE); }; //删除资源互斥锁 DeleteCriticalSection(§ion); return 0; };
C++ 多线程资源互斥锁与信号量
最新推荐文章于 2024-05-08 01:21:15 发布