C++利用Windows API 创建多线程

// 上面的例子是基于互斥对象的,这个是基于事件对象的
#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 ;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值