请教线程中VCL问题,是否可以不使用Synchronize方法?
线程中调用一个函数,耗时较长,其中该函数有几行是写form的可视化控件的。这个函数因为form中其它代码有时候也要调用,所以无法写到线程中,只能在线程中调用。使用Synchronize方法可以正确执行,但是阻塞了,失去了线程后台执行的意义了,不用Synchronize方法的话,有时候会出错,应该是VCL的问题。有没有什么好办法让该线程不使用Synchronize方法?

解决方案 »

  1.   

    要看你的应用,如果线程逻辑不需要等待界面的话,在高版本中可以使用队列Queue的方式。这样线程会继续执行。
      

  2.   

    可以试试不Synchronize整个函数
    找出其中操作form的句子再Synchronize
      

  3.   

    谢谢大家,线程中有几行语句是写主窗口的状态条。主窗口中写状态条的语句去掉,没有测试出错误,但总是不规范,或许会隐藏着错误。
    请教ZuoBaoquan:delphi7有队列Queue方式?
    请教yktd26:Synchronize方法好像只能在线程中调用吧?
      

  4.   

    这个线程执行一次就退出了,用的create(false)方法建立,所以顺序执行完主form函数后,就结束了。
    不是反复调用主form的方法。这样的话,不用Synchronize是否可行?
      

  5.   

    是我错,原想可以把你线程中的函数分成小函数,只是用Synchronize那些调用VCL的,既然你Thread调用主窗体的函数那就不行了,除非你想改改不过不管你运行几次,,只要操作vcl不用Synchronize就是不安全的
    总会有可能出错
      

  6.   

    对,把调用VCL和别的分开来调用。