一个消息循环,当不进入此消息循环时,一切操作正常。
当一进入此消息循环后,各种操作响应立即变慢,大约有近1秒钟
延迟,奇怪的是用Application.Processmessage转换CPU控制权,
反而使各种按钮等操作变得不响应了,比延迟还严重,退出此
消息循环一切变的正常。求助:在进入此消息循环的前提下,
使各种操作响应变快,怎么解决?

解决方案 »

  1.   

    const
      WM_MsgDataReady = WM_USER + 100;
    procedure OnReceiveData(var msg: TMessage); message WM_MsgDataReady;
    procedure TFrmMain.OnReceiveData(var msg: TMessage);
    begin
      DoDataMsg(msg.WParam);
    end;
    procedure TFrmMain.DoDataMsg(Channel: integer);
    var
      status: integer;
      StreamBuf: array[0..500000] of byte;
      TemBuf: array[0..24, 0..200] of byte;
    begin
      m_length := 500000;
      status := ReadStreamData(CameraGroup[Channel].CardHandle, @StreamBuf,
        @m_length,
        @frameType); //m_length参数输入缓冲的大小,输出一帧数据的长度
      ..
      ..
    end;
    其他操作就是一些响应的按钮点击事件,如果上面的那个消息循环执行,
    则其他操作变慢,而且按钮事件里加入Application.processmessage反而使
    按钮变的不可用了。
    寻求解决办法
      

  2.   

    你是在做Socket的程序吗?这里没有什么消息环呀,只是当你的发送端,发送大量数据时,他不会一下,全发过来,而接受端也不可能一下全部接受,只有一部分一部分的接受,这样在接受端处理接受数据的函数便会不停的接收数据直到数据完全接受完毕,所以在处理接受数据消息的函数中,最好不要有人参与。根据你提供的信息,我只能说这些了。