在串口通信中,我发出采集命令后,用一个waiting 函数来等待结果
waiting 是通过采集过程中传莱的不同消息进行处理 如果拖动窗体,采集过程则停止
其实要是将采集过程放到线程中,肯定能解决,但现在这样改动太大。
我觉得在这个 waiting 函数中消息 处理不完整。
function tfrm_cjmk.waiting:integer;
VAR
  message1:tmsg;
begin
result:=0;
while (GetMessage(message1, 0, 0, 0)) do
 begin
     if message1.message=WM_TIMEOUT then
     begin
       result:=1;
       break;
     end;
     if message1.message=WM_NORMAL then
     begin
       result:=2;
       break;
     end;
     if message1.message=WM_ERROR then
     begin
       result:=3;
       break;
     end;
     if message1.message=WM_END then
     begin
       result:=4;
       break;
     end;
     TranslateMessage(message1);
     DispatchMessage(message1);
 end;
end;
在这里是不是要定义默认处理? 以上几个消息都是自定义消息。程序中根据waiting
 返回值做不同处理
在线等待。

解决方案 »

  1.   

    我想你可能没写过多线程,以为会很麻烦。其实在Delphi中使用多线程极其简单,试试看!根本不需要多大的改动。
      

  2.   

    在采集过程中,我将拖动窗体消息屏蔽,不让用户拖动
    楼上说的是用线程类吧?我是自己写的串口类,我将所有通讯代码移到线程类中,但是在
    调用串口类的发数据m_port[Current].OutPut()时有问题,不知到跟我的串口类的线程有没有什么冲突,串口类在启动后既创建监视线程,监听端口的数据,m_Port[Current].StartMonitor().