首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2012-02-05 
多线程像主窗体postmessage发送消息无响应问题 - C++ Builder / Windows SDK/APIPostMessage(MainForm-ed

多线程像主窗体postmessage发送消息无响应问题 - C++ Builder / Windows SDK/API
PostMessage(MainForm->edit[i]->Handle , WM_KEYDOWN, VK_RETURN, 0);
如果开启一个线程是成功,开启两个就不行了,请教下多线程如何跟主窗体通信

[解决办法]
不能用postmessage,容易丢失。
用sendmessage或者共享内存。
[解决办法]
这个很简单,你建立线程的时候没有把主窗口的句柄传入线程。

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

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

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

如果要关闭程序,最好是发送信息给出窗口,让主窗口来关闭。
例如 ::postmessage(engin->m_hWnd,WM_EXIT);
[解决办法]
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

热点排行