多个线程可以共用一个目的窗口句柄吗
本帖最后由 xiaoze6756 于 2013-10-01 17:38:41 编辑 创建了两个线程函数对应两个串口,对当前窗口句柄(目的窗口句柄)了解不是很清楚,是否可以共用一个,同时WM_MYMSG是否共用一个就可以
主要看一下25~29,65~69是否可以这么用2次,共用一个窗体句柄,共用一个消息!
截取了部分代码:
#define WM_MYMSG WM_USER+100线程 串口 窗体 句柄
HWND hWnd;
DWORD ThreadProcEvent1(LPVOID pParam)
{
DWORD dwEvtMask1,dwRes1;
Eol1.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
while(hEventRun1)
{
WaitCommEvent(h_com1, //监视串口事件
&dwEvtMask1, //存放事件掩码组合值
&Eol1);//OVERLAPPED结构
dwRes1 = WaitForSingleObject(Eol1.hEvent, //等待事件的对象句柄
100); //超时事件(ms)
switch(dwRes1)
{
case WAIT_OBJECT_0: //成功得到事件监视结果
switch(dwEvtMask1)
{
case EV_RXCHAR://接收到数据
if(!fStopMsg1)
{
fStopMsg1=true;
//向主线程发送消息,接收到数据
::PostMessageW(hWnd,//目的窗口句柄
WM_MYMSG,//消息名称
0,//传递参数1
(LPARAM)EV_RXCHAR);//传递参数2
}
break;
case EV_TXEMPTY://发送缓冲区已经清空
AfxMessageBox(L"send buffer1 is empty");
//可以加入发送缓冲区空的处理代码,或向主线程发送消息
break;
}
break;
}
}
return true;
}
DWORD ThreadProcEvent2(LPVOID pParam)
{
DWORD dwEvtMask2,dwRes2;
Eol2.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
while(hEventRun2)
{
WaitCommEvent(h_com2, //监视串口事件
&dwEvtMask2, //存放事件掩码组合值
&Eol2);//OVERLAPPED结构
dwRes2 = WaitForSingleObject(Eol2.hEvent, //等待事件的对象句柄
100); //超时事件(ms)
switch(dwRes2)
{
case WAIT_OBJECT_0: //成功得到事件监视结果
switch(dwEvtMask2)
{
case EV_RXCHAR://接收到数据
if(!fStopMsg2)
{
fStopMsg2=true;
//向主线程发送消息,接收到数据
::PostMessageW(hWnd,//目的窗口句柄
WM_MYMSG,//消息名称
0,//传递参数1
(LPARAM)EV_RXCHAR);//传递参数2
}
break;
case EV_TXEMPTY://发送缓冲区已经清空
AfxMessageBox(L"send buffer2 is empty");
//可以加入发送缓冲区空的处理代码,或向主线程发送消息
break;
}
break;
}
}
return true;
}