急求救! 在自己创建的线程中,无法用GetMessage获取到自定义的消息

wmajia 2012-02-23 03:51:08
具体情况如下:
1. BUTTON的响应函数中创建一个线程

void CMy8902_TestDlg::OnBnClickedStartTest()
{
m_TestThread=AfxBeginThread( (AFX_THREADPROC)TestThread,(LPVOID)this );
}

2.线程函数中有如下一段代码(关键是那个 while(GetMessage(&msg.. 那一段):

pColorTestDlg=new CDialogColorTest(this);
pColorTestDlg->Create(IDD_DIALOG_COLOR_TEST);

pColorTestDlg->ModifyStyle(WS_CAPTION|WS_BORDER|WS_DLGFRAME|WS_THICKFRAME,0,0);
pColorTestDlg->CenterWindow(GetDesktopWindow());
int WINDOW_W= ::GetSystemMetrics(SM_CXSCREEN);
int WINDOW_H= ::GetSystemMetrics(SM_CYSCREEN);
pColorTestDlg->SetWindowPos(NULL, -3, -3, WINDOW_W+5, WINDOW_H+5, SWP_SHOWWINDOW);
#if 1 //如下关键代码
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
if(WM_TEST_FINISHED == msg.message)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#endif
delete pColorTestDlg;
pColorTestDlg=NULL;



注:WM_TEST_FINISHED 消息是由CDialogColorTest消息在销毁自己时发生的。



现在的问题是,如果把线程代码移到OnBnClickedStartTest中一点问题没有,但在线程中,while(GetMessage(&msg, NULL, 0, 0))不会捕捉到 WM_TEST_FINISHED


原因麻烦各位看我昨天的帖子
http://topic.csdn.net/u/20120222/15/a70e2e05-19b8-41ba-98de-444d17f5e96f.html


多谢各位了!!


...全文
271 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqhrs232 2014-01-22
  • 打赏
  • 举报
回复
今天也遇到这样的情况----明明消息已经用PostThreadMessage发了,但GetMessage就是获取不到! 不知道为什么?
wmajia 2012-02-23
  • 打赏
  • 举报
回复
改成
::PostThreadMessage( ((CMy8902_TestDlg*)AfxGetApp()->m_pMainWnd)->m_TestThread->m_nThreadID, WM_TEST_FINISHED, 0, 0 );

OK了!!


关键是PostThreadMessage和PostMessage差别,
十分感谢visualeleven 大佬,知道的真多!!

wmajia 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lactoferrin 的回复:]
getmessage只对当然线程有效
你换了个线程,其他没改当然不同
[/Quote]

有办法解决这个问题不??

急求啊。。。
wmajia 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wmajia 的回复:]
我试一下把PostMessage改成PostThreadMessage,等等。。。
[/Quote]

我在另外一个窗体测试完成时,调用
::PostThreadMessage( ( (CMy8902_TestDlg*)GetParent() )->m_TestThread->m_nThreadID, WM_TEST_FINISHED, 0,0);
DestroyWindow();


结果实验没通过。。。


Lactoferrin 2012-02-23
  • 打赏
  • 举报
回复
getmessage只对当然线程有效
你换了个线程,其他没改当然不同
wmajia 2012-02-23
  • 打赏
  • 举报
回复
我试一下把PostMessage改成PostThreadMessage,等等。。。
wmajia 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你的WM_TEST_FINISHED 消息怎么发送的?
是这样的吗?
m_TestThread->PostThreadMessage(WM_TEST_FINISHED, ...);
[/Quote]

大佬,昨天是您帮我解决问题的啊!!! 不记得了啊,下面帖子

http://topic.csdn.net/u/20120222/15/a70e2e05-19b8-41ba-98de-444d17f5e96f.html
Eleven 2012-02-23
  • 打赏
  • 举报
回复
你的WM_TEST_FINISHED 消息怎么发送的?
是这样的吗?
m_TestThread->PostThreadMessage(WM_TEST_FINISHED, ...);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧