在线程中处理数据,然后用postmessage向主窗口发消息,将处理的数据在界面上呈现出来。
虽然postmessage有些滞后,但是不会中断线程处理数据,可以及时响应网络请求。

解决方案 »

  1.   

    可以在IOCP的线程中接收他的接收数据,然后接收到的数据包已经符合到了自己的协议数据大小,就直接提取出来,然后再准备一个线程池,提取出来之后,就直接把这个回收处理任务交给这个线程池中线程去处理,这样就不用在意IOCP的接收线程被堵塞住了,访问UI神马的,直接按照线程同步的各种方法去处理就行
      

  2.   

    iocp里面只做接收数据的操作,至于处理数据什么的,那是以后的事情了,现在考虑的是iocp收到数据后,如何通知组件?是在线程中调用OnReceive函数来通知,还是由线程SendMessage给组件的隐形窗口?PostMessgae会丢失数据,所以不再考虑的范围内
      

  3.   

    线程不能操作VCL界面控件,只有发消息,让主线程处理VCL界面控件。
      

  4.   

    iocp里面只做接收数据的操作,至于处理数据什么的,那是以后的事情了,现在考虑的是iocp收到数据后,如何通知组件?是在线程中调用OnReceive函数来通知,还是由线程SendMessage给组件的隐形窗口?PostMessgae会丢失数据,所以不再考虑的范围内PostMessage会丢失数据? 难道你的窗口消息队列满了? 
      

  5.   

    1,可以同步 OnReceive 代码
    Syncronize(DoRecive) 
    procedure DoRecive();
    begin
          if assigned(FOnReceive ) then FOnReceive(xxxxx); 
    end;2,可以用PostMessage, PostMessage立即返回