文档详情

c++多线程多窗口买票实例源码.docx

发布:2017-05-24约1.83千字共4页下载文档
文本预览下载声明
c++多线程多窗口买票实例源码  PAGE \* MERGEFORMAT 4 c++多线程多窗口买票实例源码 说明:本用例是在VS2010(中文版) 环境下进行。(英文版的创建过程与此相同) 项目创建流程(只供参考):文件 ? 新建 ? Visual C++ ? Win32 项目 ? 输入项目名(Thread_Tickets) ?确定 ? 下一步 ? 选择控制台应用程序 ? 完成 项目源码 // Thread_Tickets.cpp : 定义控制台应用程序的入口点。 //头文件和公共资源 #includestdafx.h #include iostream #include windows.h using namespace std ; HANDLE hMutex; //创建互斥对象全局的所有线程共用一把锁 static int tickets=100; //共用资源全局的变量要买的总票数 //程启动函数,注意形参为LPVOID 类型 typedef viod*LPVOID DWORD WINAPI Fun1(LPVOID argv) { //cout获取线程Thread1的ID :GetCurrentThreadId()\n;//获取线程的ID while(TRUE) { WaitForSingleObject(hMutex,INFINITE);//获取线程锁如果无权获取则等待CPU资源 if (tickets0) { Sleep(10); cout1号窗口卖出--tickets-- --号票\n; } else break; //释放锁 ReleaseMutex (hMutex); } //ExitThread(0); return 0;//与ExitThread(0);等效。 } int _tmain(int arge,_TCHAR* argv[]) { DWORD ThreadID; //线程ID //创建Thread1线程 HANDLE Thread1 = CreateThread(0,0,Fun1,NULL,0,ThreadID); //SuspendThread(Thread1); //挂起线程Thread1 //输出线程Thread1的默认等级,结果为0 //coutThread1_Level:GetThreadPriority(Thread1)endl; //修改Thread1的线程等级为最高 //SetThreadPriority(Threadl,THREAD_PRIORITY_IDLE); //coutThread1_Level:GetThreadPriority(Thread1)endl;//15 //ResumeThread(Thread1),//恢复挂起的线程Thread1 //TerminateThread(Thread1, STILL_ACTIVE);//结束线程Thread2 hMutex = CreateMutex(NULL,FALSE, NULL); //cout主线程的句柄:GetCurrentThread()\n; //cout获取主线程的ID:GetCurrentThreadId()\n;//获取线程的ID while (TRUE) { WaitForSingleObject(hMutex,INFINITE);//获取线程锁如果无权获取则等待CPU资源 if (tickets0) { Sleep(10); coutVIP窗口卖出--tickets-- --号票\n; } else break; //释放锁 ReleaseMutex (hMutex); } ReleaseMutex (hMutex); CloseHandle(Thread1); return 0; } 执行结果截图 按F7编译,Ctrl + F5执行,结果如下: (这里为了截个全屏将源码中static int tickets=20; 读者可根据自己的需求设置大小。)
显示全部
相似文档