青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小明思考

高性能服務(wù)器端計(jì)算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

使用PostThreadMessage在Win32線程間傳遞消息

Posted on 2005-12-31 15:31 小明 閱讀(35215) 評(píng)論(10)  編輯 收藏 引用 所屬分類: Win32

PostThreadMessage的原型是這樣的

BOOL PostThreadMessage( DWORD idThread,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
);

PostThreadMessage可以用于線程之間的異步通訊,因?yàn)樗挥玫却{(diào)用者返回,
這也許是線程通訊中最簡單的一種方法了。

但是要注意以下問題
1 .PostThreadMessage有時(shí)會(huì)失敗,報(bào)1444錯(cuò)誤(Invalid thread identifier. )
其實(shí)這不一定是線程不存在的原因,也有可能是線程不存在消息隊(duì)列(message queue)造成的。
事實(shí)上,并不是每個(gè)thread都有message queue,那如何讓thread具有呢?
答案是,至少調(diào)用message相關(guān)的function一次,比如GetMessage,PeekMessage。

2.如果是post動(dòng)態(tài)分配的memory給另外一個(gè)thread,要注意內(nèi)存的正確釋放。

3.PostThreadMessage不能夠post WM_COPYDATE之類的同步消息,否則會(huì)報(bào)錯(cuò)

4.最好不要使用PostThreadMessage post message給一個(gè)窗口,使用PostMessage替代。

下面是我寫的一個(gè)比較嚴(yán)整的例子,僅供參考。

#include <windows.h>
#include 
<cstdio>
#include 
<process.h>

#define MY_MSG WM_USER+100
const int MAX_INFO_SIZE = 20;

HANDLE hStartEvent; 
// thread start event

// thread function
unsigned __stdcall fun(void *param)
{
    printf(
"thread fun start\n");

    MSG msg;
    PeekMessage(
&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

    
if(!SetEvent(hStartEvent)) //set thread start event 
    {
        printf(
"set start event failed,errno:%d\n",::GetLastError());
        
return 1;
    }
    
    
while(true)
    {
        
if(GetMessage(&msg,0,0,0)) //get msg from message queue
        {
            
switch(msg.message)
            {
            
case MY_MSG:
                
char * pInfo = (char *)msg.wParam;
                printf(
"recv %s\n",pInfo);
                delete[] pInfo;
                
break;
            }
        }
    };
    
return 0;
}

int main()
{
    HANDLE hThread;
    unsigned nThreadID;

    hStartEvent 
= ::CreateEvent(0,FALSE,FALSE,0); //create thread start event
    if(hStartEvent == 0)
    {
        printf(
"create start event failed,errno:%d\n",::GetLastError());
        
return 1;
    }

    
//start thread
    hThread = (HANDLE)_beginthreadex( NULL, 0&fun, NULL, 0&nThreadID );
    
if(hThread == 0)
    {
        printf(
"start thread failed,errno:%d\n",::GetLastError());
        CloseHandle(hStartEvent);
        
return 1;
    }

    
//wait thread start event to avoid PostThreadMessage return errno:1444
    ::WaitForSingleObject(hStartEvent,INFINITE);
    CloseHandle(hStartEvent);

    
int count = 0;
    
while(true)
    {
        
char* pInfo = new char[MAX_INFO_SIZE]; //create dynamic msg
        sprintf(pInfo,"msg_%d",++count);
        
if(!PostThreadMessage(nThreadID,MY_MSG,(WPARAM)pInfo,0))//post thread msg
        {
            printf(
"post message failed,errno:%d\n",::GetLastError());
            delete[] pInfo;
        }
        ::Sleep(
1000);
    }

    CloseHandle(hThread);
    
return 0;
}

===========Happy New Year==============

 

Feedback

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2008-02-25 14:26 by tmp
好文章!!!

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2009-02-14 18:02 by xym
很有用,謝謝!

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2009-05-22 15:29 by 飛鴿傳書
好復(fù)雜!!!

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2009-08-06 08:21 by 張力
請(qǐng)嘗試著不同進(jìn)程之間的線程如何通信:比如說,我想在A進(jìn)程中殺死B進(jìn)程中的一個(gè)特定線程

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2011-04-08 15:00 by 萬昊
無窗口線程的消息隊(duì)列的建立,在msdn的PostThreadMessage的remark部分有詳細(xì)介紹。

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2011-09-08 01:11 by pofante
好文章

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2012-09-20 23:11 by albin
好文章

# re: 使用PostThreadMessage在Win32線程間傳遞消息[未登錄]  回復(fù)  更多評(píng)論   

2013-07-30 22:59 by 1
非常好的文章,找了半天終于解決了問題!GOOD!非常感謝!!

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2015-06-06 11:59 by Mr.Z
學(xué)到了,謝謝作者

# re: 使用PostThreadMessage在Win32線程間傳遞消息  回復(fù)  更多評(píng)論   

2016-03-17 10:09 by Paul wang
有效的的將結(jié)合代碼,不知postthreadmessage的效率怎樣
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费在线视频一区| 一区二区av| 久久国产精品色婷婷| 亚洲欧美自拍偷拍| 午夜在线电影亚洲一区| 久久亚洲私人国产精品va媚药| 亚洲伊人观看| 午夜日韩激情| 欧美一区二区视频网站| 欧美一区二区三区久久精品| 久久av老司机精品网站导航| 欧美综合国产| 久久视频在线看| 亚洲第一在线综合在线| 亚洲国产三级在线| 亚洲美女毛片| 欧美激情一区二区三区成人| 亚洲毛片一区| 久久九九热免费视频| 欧美电影在线播放| 国产精品一区二区三区观看| 国语自产偷拍精品视频偷| 亚洲国产女人aaa毛片在线| 伊人久久大香线蕉av超碰演员| 亚洲国产婷婷香蕉久久久久久| 亚洲视频精品在线| 久久亚洲综合网| 亚洲国产综合视频在线观看| 在线亚洲欧美专区二区| 久久三级福利| 欧美日韩在线视频观看| 韩国精品久久久999| 亚洲伦伦在线| 久久综合网hezyo| 一区二区黄色| 欧美 日韩 国产在线 | 欧美寡妇偷汉性猛交| 亚洲人成网站精品片在线观看| 午夜精品福利一区二区蜜股av| 欧美 日韩 国产在线| 国产视频一区三区| 中文av一区二区| 欧美二区乱c少妇| 午夜日韩av| 欧美日韩一区二区三区在线| 亚洲电影免费在线观看| 亚洲欧美亚洲| 亚洲九九精品| 欧美成人一二三| 激情丁香综合| 久久久久成人网| 亚洲欧美在线另类| 国产精品成人v| 在线亚洲美日韩| 亚洲国产美女久久久久| 久久全球大尺度高清视频| 国产欧美视频在线观看| 亚洲欧美日韩在线| 韩国精品一区二区三区| 欧美一区亚洲一区| 亚洲久久一区| 在线欧美日韩精品| 久久精品一区中文字幕| 亚洲欧美一区二区精品久久久 | 国产伦精品一区二区三区在线观看 | 国产精品免费福利| 亚洲一区二区在线视频| 日韩视频免费| 欧美日韩视频专区在线播放 | 亚洲国产中文字幕在线观看| 毛片基地黄久久久久久天堂| 久久精品99国产精品酒店日本| 国产午夜精品久久久| 久久精品电影| 久久久久久电影| 亚洲国产欧美一区| 亚洲日本电影| 国产精品九色蝌蚪自拍| 欧美一区二区啪啪| 久久精品国产v日韩v亚洲 | 亚洲激情校园春色| 欧美精品粉嫩高潮一区二区 | 美女任你摸久久| 久久在线免费视频| 亚洲日本电影| 中国成人在线视频| 国产日韩欧美在线播放| 麻豆国产精品777777在线 | 国产午夜精品久久久| 久久精品欧美日韩| 女人香蕉久久**毛片精品| 亚洲最新在线| 亚洲欧美日韩精品综合在线观看 | 欧美日本国产一区| 亚洲欧美伊人| 久久久国产亚洲精品| 亚洲日本电影| 亚洲免费网站| 欧美日韩免费一区| 久久精品免费观看| 欧美激情欧美狂野欧美精品| 伊伊综合在线| 99在线热播精品免费99热| 国产啪精品视频| 久久国产精品72免费观看| 久久蜜桃香蕉精品一区二区三区| 国产亚洲一二三区| 亚洲精品欧美日韩专区| 亚洲午夜精品| 久久久久久久综合| 亚洲综合日韩在线| 久久综合久久综合久久综合| 亚洲一区二区免费看| 久久久人成影片一区二区三区观看 | 亚洲视频综合| 久久亚洲国产精品日日av夜夜| 在线亚洲一区观看| 免费成人av资源网| 久久久久国产一区二区| 欧美少妇一区| 亚洲国产日韩一级| 在线日韩av| 欧美一区激情视频在线观看| 亚洲天堂av电影| 欧美激情一区在线| 欧美成人亚洲成人日韩成人| 国产视频一区在线观看| 亚洲私人影院| 亚洲在线观看免费| 欧美激情小视频| 免费成人av在线| 国模叶桐国产精品一区| 午夜精品福利一区二区三区av | 久久aⅴ乱码一区二区三区| 亚洲欧美日韩天堂一区二区| 欧美日韩国产限制| 亚洲精品欧洲| 夜夜嗨av色一区二区不卡| 久热精品视频在线观看一区| 久久婷婷丁香| 黄色亚洲网站| 久久久久女教师免费一区| 久久在线观看视频| 黄色一区二区在线观看| 久久精品欧洲| 欧美xxxx在线观看| 亚洲国产日韩一级| 免费亚洲电影在线| 亚洲国产mv| 一区二区动漫| 国产精品日韩在线观看| 欧美一级一区| 免费欧美日韩| 99国产精品视频免费观看一公开| 欧美日本在线视频| 一区二区三区黄色| 欧美一区高清| 黄色精品免费| 欧美激情中文字幕一区二区| 99riav国产精品| 午夜精品一区二区三区在线播放 | 18成人免费观看视频| 久久综合色播五月| 一区二区国产日产| 国产精品一区二区黑丝| 亚洲毛片在线免费观看| 亚洲一级二级| 国产欧美一区二区精品性| 欧美在线观看天堂一区二区三区| 久久香蕉国产线看观看av| 在线播放视频一区| 欧美国产先锋| 亚洲免费影视| 欧美电影在线播放| 亚洲视频免费在线| 国产亚洲二区| 欧美高清影院| 校园激情久久| 亚洲人成在线播放网站岛国| 欧美一级网站| 亚洲伦理在线| 国产一区二区精品丝袜| 欧美屁股在线| 久久精品99国产精品酒店日本| 亚洲级视频在线观看免费1级| 亚洲欧美日韩一区二区| 亚洲国产小视频在线观看| 欧美日韩亚洲一区二区三区在线 | 亚洲精品久久久一区二区三区| 欧美天天综合网| 久久亚洲精品伦理| 亚洲免费人成在线视频观看| 亚洲国产精品成人综合色在线婷婷| 亚洲欧美日韩国产成人| 亚洲人成网在线播放| 国产欧美日韩亚洲精品| 欧美日韩小视频| 欧美成人性生活| 久久久夜夜夜| 欧美在线短视频|