我和下位机的通信是实时的,平均是300毫秒一次,有时候要在在串口接收数据的事件里面,跳出一个MessageBox,然用户进行选择,因为这个过程会耗时的,但是串口又会接收数据,会导致程序出错,该怎么样解决这个问题呢?
解决方案 »
- toolbar实现类似windows的任务栏
- 如何在一个程序中实现“当程序被人从进程列表中强行结束就执行一段特定得代码(如写错误日志)”在线等待。。。
- 新手上路:窗体的线边框怎么做
- SOS!!!!!用过Ehlib的DBGridEh的请进!
- 请教用Indy控件发送电子邮件的问题!!!
- 如何XML数据转入ACCESS数据库?
- 请大家看看这段简单的程序到底是那错了!
- 一个关于Sql批删除某些数据的问题。up有分
- MDI
- 我在批量处理的情况下 adodataset1.DeleteRecords(arCurrent);为什么错误?
- 谁来优化下函数,webbrowser的POST发送
- 关于ActiveX问题
只要创那一个一次执行的线程,在线程里面写messagebox就可以了,不过那不能太多个,你一下跳太多了系统可能支持不过来,不过好的电脑可能会好点,我用的是一台单核的老机子了所以发太多的时候会提示线程接收不过来,但只要把窗体最小化再显示出来就可以了!
希望对你有帮助!
另外不喜欢Spcomm,接收数据方式很不喜欢,如果你的应用就是单对单的,用它也还凑合,如果是单对多的还是用CPORT更好
......
WaitForSingleObject(aEvent,INFINITE);//aEvent同步事件对象
...
....//这儿是通信处理
....
PostMessage();主线程的消息处理方法中:
.....
case theMessage.wParam of
1://假设这个标志要进行选择
begin
ResetEvent(aEvent);//挂起线程
if Application.MessageBox() = XXX then
begin
...
end
SetEvent(aEvent);//恢复线程
end
2:
3:end用类似的同步事件方法来进行控制。这里提醒下,不要用线程本身的Suspended和Resume来挂起和恢复,在window下不可靠