windows下多线程简单demo

来源:互联网 发布:查询python版本 编辑:程序博客网 时间:2024/05/16 07:11
#include <iostream>#include <cstdlib>#include <Windows.h>using namespace std;int tickets = 100;HANDLE hMutex;DWORD WINAPI Fun1Proc(LPVOID lpParameter){while (true){WaitForSingleObject(hMutex, INFINITE); //请求互斥量访问权if (tickets > 0){Sleep(10);cout << "Thread 1 sell ticket : "<<tickets--<<endl;}else{break;   }ReleaseMutex(hMutex);//释放}return 0;}DWORD WINAPI Fun2Proc(LPVOID lpParameter){while (true){WaitForSingleObject(hMutex, INFINITE);if (tickets > 0){Sleep(10);cout << "Thread 2 sell ticket : "<<tickets--<<endl;}else{break;}ReleaseMutex(hMutex);}return 0;}//创建两个线程,线程之间通过创建的互斥量来互斥int main(){/*第一个参数同样是安全结构,默认是NULL不能继承句柄;第二个参数为FALSE时创建Mutex时不指定所有权,若为TRUE则指定为当前的创建线程ID为所有者,其他线程访问需要先ReleaseMutex;第三个参数用于设置Mutex名,为NULL时表示是匿名互斥量*/hMutex = CreateMutex(NULL, FALSE, NULL);/*-1-第一个参数是安全属性结构,主要控制该线程句柄是否可为进程的子进程继承使用,默认使用NULL时表示不能继承;若想继承线程句柄,则需要设置该结构体,将结构体的bInheritHandle成员初始化为TRUE;-2-cbStack表示的线程初始栈的大小,若使用0则表示采用默认大小初始化;-3-lpStartAddr表示线程开始的位置,即线程要执行的函数代码,这点有点类似于回调函数的使用;-4-lpvThreadParam用来接收线程过程函数的参数,不需要时可以设置为NULL;-5-fdwCreate表示创建线程时的标志,CREATE_SUSPENDED表示线程创建后挂起暂不执行,必须调用ResumeThread才可以执行,0表示线程创建之后立即执行-6-lpIDThread用来保存线程的ID;*/HANDLE hThread_1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//创建线程1HANDLE hThread_2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);//创建线程2CloseHandle(hThread_1);CloseHandle(hThread_2);system("pause");return 0;}

原文链接


http://blog.chinaunix.net/uid-26275986-id-3886498.html