找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2745|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C++創(chuàng)建線程互斥對(duì)象

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71922 發(fā)表于 2015-1-11 00:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <windows.h>//包含頭文件
#include <stdio.h>




DWORD WINAPI myfun1(//聲明線程函數(shù)
  LPVOID lpParameter   
);
DWORD WINAPI myfun2(
  LPVOID lpParameter   
);
HANDLE hmutex;
int a=0;//定義全局變量a
main()
{
  hmutex=::CreateMutex(NULL,FALSE,NULL);//創(chuàng)建互斥對(duì)象并返回其句柄
  HANDLE h1,h2;//定義線程句柄
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//創(chuàng)建線程1
printf("線程1開始運(yùn)行!\r\n");
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//創(chuàng)建線程2
printf("線程2開始運(yùn)行!\r\n");
::CloseHandle(h1);//關(guān)閉線程句柄對(duì)象
::CloseHandle(h2);
        ::Sleep(100000);//程序睡眠10秒
return 0;


  }


DWORD WINAPI myfun1(LPVOID lpParameter) //線程函數(shù)1
{
   while(1)
   {
   ::WaitForSingleObject(hmutex,INFINITE);//請(qǐng)求事件對(duì)象
         
   if(a<10000)
          {
     a+=1;//變量自加
     ::Sleep(1000);//線程睡眠1秒
             printf("線程1:%d\r\n",a);
      ::ReleaseMutex(hmutex);
//釋放互斥對(duì)象句柄
          }
else
{
    ::ReleaseMutex(hmutex);//釋放互斥對(duì)象句柄
        break;//跳出循環(huán)
         }


    }


    return 0;//線程
}


DWORD WINAPI myfun2(LPVOID lpParameter) //線程函數(shù)2
{
  while(1)
   {
::WaitForSingleObject(hmutex,INFINITE);//請(qǐng)求事件對(duì)象


//設(shè)置事件對(duì)象為無信號(hào)狀態(tài)
if(a<10000)
{
     a+=1;
     ::Sleep(1000);
        printf("線程2:%d\r\n",a);//輸出變量
        ::ReleaseMutex(hmutex);
//釋放互斥對(duì)象句柄
  }
else
{

::ReleaseMutex(hmutex);//釋放互斥對(duì)象句柄
    break;
//跳出循環(huán)
   }


    }


    return 0;//線程正常退出
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表