我的程序要实现如下功能:每秒接收一定的数据,实时处理后以图像的方式显示出来,由于处理数据需要一定时间,为不影响接收,打算采取多线程的方式,主线程显示数据,一个线程接收处理数据,数据由另一程序以sendmessage WM_COPYDATA方式发送,我试了一下,自己创建线程中无法收到sendmessage WM_COPYDATA消息,这可怎么办呢?

解决方案 »

  1.   

    PostThreadMessage和sendmessage wmcopydata不是一回事好吧~
      

  2.   

    用SendMessage,内存的分配和释放比较好控制些。
    你在线程里,创建一个隐藏的窗口(大小为0),并公布这个窗口的handle,外部直接取用这个handle sendMessage即可。然后,可以override 窗口的wndProc 或 直接写消息处理函数 来处理你的业务需要;也可以子类化该窗口,不必重载窗口类。
      

  3.   


    动态创建一个窗口Tmyform.create(self),如何隐藏而且让其大小为0呢?如何公布窗口的HANDLE呢?谢谢~ 
      

  4.   

    怎么会认为是动态呢?
    此窗口随线程生灭。
    height,width设置为0即可,或参考application中的隐藏form创建方式。
    创建完窗体,记住handle,也可参考Application.handle
      

  5.   

    建议楼主学习一下,很有帮助的。
    http://www.cnblogs.com/gzcszzx/articles/2110675.html
      

  6.   

    FHandle := Classes.AllocateHWnd(MainWndProc);
    {AllocateHWnd是Classes单元的全局过程,需要一个TWndMethod类型的参数(即一个窗
    口过程);其作用是创建一个不可见窗口并将参数传入的窗口过程关联于它,返回所创建窗口的句柄}
    if FHandle <> 0 then
    Classes.DeallocateHWnd(FHandle); {销毁已创建的窗口}
      

  7.   

    数据由另一程序以sendmessage WM_COPYDATA方式发送,我试了一下
    你为什么不开一个处理线程呢。
      

  8.   

    建立一个线程消息队列
    一般由线程PeekMessag就会建立线程消息队列