我的程序: 主线程下有两个子线程,  每个子线程会调用一个函数, 每个函数会根据不同的输入值在进行一定的处理之后在主线程的memo中输出对应的信息。但,多线程中操作主线程的vcl控件经常会出错,我的程序也经常报内存冲突。 我不知道改怎么解决啊我知道用synchronaze可以解决,但synchronaze不能加参数的,我该怎么进行值传递呢??

解决方案 »

  1.   

    你写个线程类的成员函数,在里面再调用外部VCL类的成员,这时候就可以带上值传递了
      

  2.   

    在下曾经写过一个线程类可以很好的解决这个问题。
    首先在私有函数中定义一个私有变量FContl :Tmemo
    然后再定义一个同步函数,在同步函数中对VCL控件进行读写,
    然后用synchronaze来调用同步函数即可。
    如果有兴趣可以参阅http://dev.csdn.net/article/32/32956.shtm
    正好可以解决你的问题。
      

  3.   

    创建性程的时候,传入对应memo的串口的handle,
    然后,在线程直接向该handle发消息就可
      

  4.   


    如果有多個線程要更新主form的一些控件的信息, 一般我是用消息傳送來統一處理, 也就是說,將線程要更新的東西,直接發消息到 Form , 然後, 由Form接收, 處理顯示的部分!用PostMessage(FormHandle, WM_USER + 1, 0, integer(pchar(string)));FormHandle可在線程創建的時候傳進去, 或用其它方法傳進去
    WM_USER + 1 是自己定義的, 只要兩邊統一就好
    0, 也可設成你需要的
    string 就是你要傳的字符信息了
      

  5.   

    同意aiirii的说法
    用消息来处理
      

  6.   

    偶是菜鸟,如果用偶菜鸟的办法来做的话就是这样的:定义一个全区的String,和一个标志变量(用int吧)然后各线程在标志不为1时,将输出的信息放入String,输出后标志变量变成1(如为1等待)。主线程间隔一定时间将String输出到Memo中,输出完后将标志置为0。我想,我这个方法应该不会有问题。