我最近要做个多线程的,请大家说说多线程方面的经验比如同步、管理等等,先谢!

解决方案 »

  1.   

    如果你写的程序不会阻塞,只是循环,那不用线程,在循环中加入Application.ProcessMessage就行了,如果会的话,那就
    那就不知道了
      

  2.   

    如果但线程循环里面两次application.processmessages之间有可能时间很长,就有可能“阻塞”。可以用两个线程:一个界面主线程,一个工作线程,最好别用synchonize,我做了一些试验,这样同步vcl的访问好像很慢,用消息在线程之间通信比较快。或者简单些只要工作线程向应用程序主线程窗体发消息,由主线程负责销毁工作线程对象也可以!线程返回值似乎不行,但是一定要这样做么?
    只要用vcl的tthread,完全可以在execute结束以后给主线程发个消息,主线程得到这个消息以后负责读取thread对象里面的一个成员变量(这就是所谓的返回值,在execute之后由你负值),然后由主线程负责销毁线程对象。一定记住:tthread.freeonterminate:=false;
      

  3.   

    线程同步:
    vcl提供了tcriticalsection类,使用很简单,只要所有对共享变量的访问都遵循这个访问规则就可以。
    进程之间可以用mutex和waitforsingleobject msdn和delphi help里面都有写!
    当然这个也可以用于线程。
      

  4.   

    如果时数据库的多线程的话,每个与数据库的通讯都必须有自己唯一的session,
    否则会在主线程中保错, 还有多线程查询时,如果要显示查询数据,最好断开与
    主线程的关联,查询完后,在关联起来,
      

  5.   

    to stanely(俺是邢她汉子) tthread.freeonterminate:=true;
      

  6.   

    我想楼主的愿意应该是zsy_good所言吧:
    线程池的使用,线程同步,使用线程千万不要使用公用变量,尽量把。
    要不程序难以控制,容易出错。而且错误非常难找
    不然,简单的线程,不应该到Delphi 网络编程/分布式开发问题 这个版块来问的;
    其实,你只要在程序中,熟悉Apartment的用法就成了;
      

  7.   

    to: wlw88(飞扬) 你错了。不要死读书阿,兄弟!
    不是任何时候都要tthread.freeonterminate:=true;!
    否则vcl干嘛还要留下这个属性让你操作呢?直接terminate以后自动free掉算了!你大概不明白我的意思,我是要主线程负责free其它线程阿!