C++利用Windows API 创建多线程
来源:互联网 发布:php图片一句话木马 编辑:程序博客网 时间:2024/06/06 07:50
//上面的例子是基于互斥对象的,这个是基于事件对象的
#include<windows.h>
#include<iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
int tickets=100;
HANDLE g_hEvent;
void main(){
HANDLE hThread1; HANDLE hThread2;
//创建人工重置事件内核对象
g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets");
if (g_hEvent) {
if (ERROR_ALREADY_EXISTS==GetLastError()) {
cout<<"only one instance can run!"<<endl;
return;
}
}
SetEvent(g_hEvent);
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
//让主线程睡眠4秒
Sleep(4000);
//关闭事件对象句柄
CloseHandle(g_hEvent);
}
//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data{
while (true) {
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0) {
Sleep(1);
cout<<"thread1 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
} else {
SetEvent(g_hEvent);
break;
}
}
return 0;
}
//线程2的入口函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data{
while (true) {
//请求事件对象
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0) {
Sleep(1);
cout<<"thread2 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
} else {
SetEvent(g_hEvent);
break;
}
}
return 0;
}
#include<windows.h>
#include<iostream.h>
DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
int tickets=100;
HANDLE g_hEvent;
void main(){
HANDLE hThread1; HANDLE hThread2;
//创建人工重置事件内核对象
g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets");
if (g_hEvent) {
if (ERROR_ALREADY_EXISTS==GetLastError()) {
cout<<"only one instance can run!"<<endl;
return;
}
}
SetEvent(g_hEvent);
//创建线程
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
//让主线程睡眠4秒
Sleep(4000);
//关闭事件对象句柄
CloseHandle(g_hEvent);
}
//线程1的入口函数
DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data{
while (true) {
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0) {
Sleep(1);
cout<<"thread1 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
} else {
SetEvent(g_hEvent);
break;
}
}
return 0;
}
//线程2的入口函数
DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data{
while (true) {
//请求事件对象
WaitForSingleObject(g_hEvent,INFINITE);
//ResetEvent(g_hEvent);
if (tickets>0) {
Sleep(1);
cout<<"thread2 sell ticket :"<<tickets--<<endl;
SetEvent(g_hEvent);
} else {
SetEvent(g_hEvent);
break;
}
}
return 0;
}
- C++利用Windows API 创建多线程
- C语言利用Windows api创建文件打开对话框模板
- 用标准Windows API创建多线程程序
- 用标准 Windows API 创建多线程程序
- 用标准 Windows API 创建多线程程序
- c语言,用APi初次创建多线程
- C语言使用windows api实现多线程
- Windows下c语言串口的编写(利用API)
- windows api 多线程
- windows api 多线程
- Windows多线程相关API
- Windows API 多线程问题
- OS之Windows API创建子进程(C VS 2008)
- 《Windows API》创建窗口
- C/C++windows多线程
- windows线程API 及多线程
- C++多线程编程(windows API)
- C++ Windows API 实现多线程
- mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication
- c讀取文本文件並將單詞存入數組排序輸出
- 用WTL的文件对话框打开图片,D3D渲染
- 关于标准c中的strtok和linux库里面的strsep
- 学习ACE
- C++利用Windows API 创建多线程
- 在命令行查看PDF文件 office文件
- HTML5应用——简易播放器
- pl/sql常用脚本3
- 高性能Web服务器Nginx的配置与部署研究(15)Upstream负载均衡模块
- 模板函数的声明和定义都放在一个文件中
- VC++ MFC控件学习
- 【ASP.NET】ASP.NET缓存技术学习入门---页面缓存(OutPut Caching)
- strdup,兼具malloc和strcpy的作用