日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++线程通信

發布時間:2024/4/14 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++线程通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是我現在使用的一種線程通信方式的代碼片段,兩個線程之間通過自定義消息進行通知,


#define?MY_MSG?WM_USER+100?//線程通信的自定義消息
//消費者
DWORD?Consumer::Run()
{//創建線程并啟動
????DWORD?ThreadId;
????m_hThread?
=?CreateThread(?NULL,0,Routine,0,0,&ThreadId?);//創建更新線程
????if(?NULL?==?m_hThread?)
????
{
????????
return?-1;//啟動失敗
????}


????
return?ThreadId;//線程啟動成功
}


DWORD?WINAPI?Consumer::Routine(?LPVOID?lParam)
{//線程運行函數
????std::cout<<"消費者線程啟動\n";
????MSG?msg;
????PeekMessage(
&msg,?NULL,?WM_USER,?WM_USER,?PM_NOREMOVE);

????
while(true)
????
{
????????
if(GetMessage(&msg,0,0,0))?//get?msg?from?message?queue
????????{
????????????
switch(msg.message)
????????????
{
????????????
case?MY_MSG:
????????????????
//do?something?here
????????????????std::cout<<"收到消息"<<std::endl;
????????????????
break;
????????????}

????????}

????}
;
????
return?0;
}

//生產者
DWORD?Producer::Run(LPDEALFUNCTION?dealfun,LPVOID?lParam)
{
????DWORD?ThreadId;
????m_DealFun?
=?dealfun;
????m_DealFunParam?
=?NULL;
????m_hThread?
=?CreateThread(?NULL,0,Routine,this,0,&ThreadId?);//創建監控線程
????if(?NULL?==?m_hThread?)
????
{
????????
return?-1;
????}

????
return?ThreadId;
}


DWORD?WINAPI?Producer::Routine(?LPVOID?lParam?)
{?
????Producer
&?obj?=?*(Producer*)lParam;//生產者對象

????
while(?!obj.m_bRequestStop?)
????
{//線程就不斷運行直到收到用戶的退出請求
????????obj.m_DealFun(obj.m_DealFunParam?);
????}

????
return?0;
}

//main.cpp
HANDLE?hStartEvent;?//?thread?start?event
unsigned?nConsumerID,nProducerID;

void?__stdcall?MyDeal(?LPVOID?lParam?)
{
????std::cout
<<"開始發送消息.."<<std::endl;

????
if(!PostThreadMessage(nConsumerID,MY_MSG,NULL,NULL))//post?thread?msg
????{
????????printf(
"post?message?failed,errno:%d\n",::GetLastError());
????}

????::Sleep(
1000);
}

int?main()
{
????Consumer?consumer;
????nConsumerID?
=?consumer.Run();//啟動更新線程

????
if(nConsumerID?==?-1)
????
{
????????std::cout
<<"start?thread?failed"<<std::endl;
????????
return?-1;
????}


????Producer?pProducer;
????nProducerID?
=?pProducer.Run(&MyDeal,?0?);//啟動監控線程
????if(?nProducerID==-1?)
????????
return?-1;

????
return?0;
}


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

總結

以上是生活随笔為你收集整理的VC++线程通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。