多线程像主窗体postmessage发送消息无响应问题

mengyq_82 2009-11-25 03:23:51
PostMessage(MainForm->edit[i]->Handle , WM_KEYDOWN, VK_RETURN, 0);
如果开启一个线程是成功,开启两个就不行了,请教下多线程如何跟主窗体通信
...全文
488 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
n27741 2010-03-01
  • 打赏
  • 举报
回复
DWORD WINAPI ThreadProc1(
LPVOID lpParameter
);

DWORD WINAPI ThreadProc2(
LPVOID lpParameter
);

DWORD WINAPI ThreadProc1(
LPVOID lpParameter
)
{
int i = 10;
while (i)
{
HWND hwndMain = (HWND)lpParameter ;
SendMessage(hwndMain,WM_CHAR,(WPARAM)'C' ,0);
i--;
}
return 0;

}

DWORD WINAPI ThreadProc2(
LPVOID lpParameter
)
{
int i = 10;
while (i)
{
HWND hwndMain = (HWND)lpParameter ;
SendMessage(hwndMain,WM_CHAR,(WPARAM)'1' ,0);
i--;
}
return 0;

}

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btn1Click(TObject *Sender)
{
this->WindowProc = SubClassWndProc;
hthread1 = CreateThread(NULL,0,ThreadProc1,LPVOID(this->Handle),0,NULL );
CloseHandle(hthread1);
hthread2 = CreateThread(NULL,0,ThreadProc2,LPVOID(this->Handle),0,NULL );
CloseHandle(hthread2);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SubClassWndProc(Messages::TMessage &Message)
{
switch(Message.Msg)
{
case WM_CHAR:
this->mmo1->Lines->Add(Message.WParam);
break;

}

this->WndProc(Message);



}

bcb 6 下测试通过,2个线程向一个Form1 SendMessage
yize.link 2009-12-15
  • 打赏
  • 举报
回复
这个很简单,你建立线程的时候没有把主窗口的句柄传入线程。

LPVOID handle;
handle = m_hWnd;
例如启动线程的时候,把handle传入线程
thader(LPVOID handle)

线程接收到后。
template engin = (myengin*)handle;

这个时候,线程里面的 engin 就会变成你主窗口的句柄。
这时候你要干什么都可以了。

如果要关闭程序,最好是发送信息给出窗口,让主窗口来关闭。
例如 ::postmessage(engin->m_hWnd,WM_EXIT);
mengyq_82 2009-11-26
  • 打赏
  • 举报
回复
试了,SendMessage也不行
小笨象 2009-11-25
  • 打赏
  • 举报
回复
不能用postmessage,容易丢失。
用sendmessage或者共享内存。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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