void OnButton1()
{
MSG msg;
SeedSocketMessage();
//点击Button1往设备网口发送信息然后在循环内等待超时(大概在300毫秒~1秒内可调)或接收线程收到
//往下发送的信息的反馈信息后往本界面线程发送(可能为PostMessage或SeedMessage)自定义消息
//WM_CUSTOMPOSTMSG,并在循环内时不时响应界面刷新消息
//当然接收线程不一定会收到往下发送的信息的反馈信息,或者收到往下发送的信息的反馈信息前受到设备报警信息
int ntime = GetTickCount();
while(1)
{
if(PeekMessage(&msg,hWnd1,WM_PAINT,WM_PAINT,PM_NOREMOVE))
{
while(GetMessage(&msg,hWnd1,WM_PAINT,WM_PAINT))
DispatchMessage(&msg);
}
if(PeekMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG,PM_NOREMOVE))
//WM_CUSTOMPOSTMSG为另一线程发送(可能为PostMessage或SeedMessage)给本界面主线程的用户自定义消息
{
while(GetMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG))
{
DispatchMessage(&msg);
break;
}
} if((GetTickCount() - ntime) > 300)
{
break;//超时跳出循环
}
}
}
运行时点击主线程界面Button1按钮,在其响应往设备发送控制信息然后计时,然后在循环刷新界面并等待接收线程接收信息分解出控制信息的反馈信息后发送WM_CUSTOMPOSTMSG到主界面线程,主界面线程的响应该消息函数处理后退出循环。或如果是设备报警信息则接收线程直接写入数据库报警信息表中,或超时退出循环。大家帮分析确认一下该方法可行不?需要那些改进,发送WM_CUSTOMPOSTMSG该用PostMessage,还是SeedMessage,各有那些弊端或优缺点?分不够,另开帖再散!
{
MSG msg;
SeedSocketMessage();
//点击Button1往设备网口发送信息然后在循环内等待超时(大概在300毫秒~1秒内可调)或接收线程收到
//往下发送的信息的反馈信息后往本界面线程发送(可能为PostMessage或SeedMessage)自定义消息
//WM_CUSTOMPOSTMSG,并在循环内时不时响应界面刷新消息
//当然接收线程不一定会收到往下发送的信息的反馈信息,或者收到往下发送的信息的反馈信息前受到设备报警信息
int ntime = GetTickCount();
while(1)
{
if(PeekMessage(&msg,hWnd1,WM_PAINT,WM_PAINT,PM_NOREMOVE))
{
while(GetMessage(&msg,hWnd1,WM_PAINT,WM_PAINT))
DispatchMessage(&msg);
}
if(PeekMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG,PM_NOREMOVE))
//WM_CUSTOMPOSTMSG为另一线程发送(可能为PostMessage或SeedMessage)给本界面主线程的用户自定义消息
{
while(GetMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG))
{
DispatchMessage(&msg);
break;
}
} if((GetTickCount() - ntime) > 300)
{
break;//超时跳出循环
}
}
}
运行时点击主线程界面Button1按钮,在其响应往设备发送控制信息然后计时,然后在循环刷新界面并等待接收线程接收信息分解出控制信息的反馈信息后发送WM_CUSTOMPOSTMSG到主界面线程,主界面线程的响应该消息函数处理后退出循环。或如果是设备报警信息则接收线程直接写入数据库报警信息表中,或超时退出循环。大家帮分析确认一下该方法可行不?需要那些改进,发送WM_CUSTOMPOSTMSG该用PostMessage,还是SeedMessage,各有那些弊端或优缺点?分不够,另开帖再散!
解决方案 »
- int libnet_init_packet(u_short packet_size, u_char **buf)分配的内存地址为0x000是什么原因造成的。
- control list 控件显示一块白
- 想要把从串口读入的数据一个一个保存在.txt文件里?
- 请教高手(更改其他程序的显示样式,怎样实现全屏幕显示[没有控制条])
- 关于DB-Library程序的打包问题,送分题!在线等候!
- 我的硬盘怎么看不见了!!帮忙呀!!在线等待!!
- 超级烦:MIDL2025如何解决?
- ("在线等待")--注册表下的组件线程模型值什么时候会被访问到?
- 函数指针出错,,求指导
- 急急急:OCX控件修改图像后,图像怎么能及时更新
- 在Richedit中插入ole控件的问题
- 如何将clistctrl中的选定项去选定?
SendMessage是等待目标线程处理完消息后返回,可以得知处理结果,类似于函数调用。如程序要同时处理多项不同类的任务,而任务之间又存在依赖关系,可以用多线程分别处理不同的任务,通过SendMessage通讯。很多时候这两个函数都可以使用,通常选择SendMessage,因为其相对简单可靠。但需要注意,如果线程之间相互依赖则可能造成互锁,要设法避免。
PostMessage()将该消息放入消息队列,不管是否处理该函数立即返回,非阻塞,异步。
1, 每次都sleep(1);
2, 添加一个循环次数的count, 然后++;
3, 判断count>300, break.
while(1)
{
if (nCount > 300)
{
break;
}
if(PeekMessage(&msg,hWnd1,WM_PAINT,WM_PAINT,PM_NOREMOVE))
{
while(GetMessage(&msg,hWnd1,WM_PAINT,WM_PAINT))
DispatchMessage(&msg);
}
if(PeekMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG,PM_NOREMOVE))
//WM_CUSTOMPOSTMSG为另一线程发送(可能为PostMessage或SeedMessage)给本界面主线程的用户自定义消息
{
while(GetMessage(&msg,hWnd1,WM_CUSTOMPOSTMSG,WM_CUSTOMPOSTMSG))
{
DispatchMessage(&msg);
break;
}
} nCount++;
Sleep(1);
}
if(PeekMessage(&msg, m_hWnd, 0, 0, PM_NOREMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);并且while(1), 只需一个. 呵呵.