急!老板叫我用线程做一个项目,现有对多线程技术的7问!望各位大侠解小弟之惑!每问100分,我会另外发贴付份,失言自宫!问题一:
    在不用全局变量的前提下,请问如何将参数传递给线程?问题二:
    如何能够安全稳定的关闭/释放一个线程?
    TerminateThread(tempThread.Handle, int temp);是安全的吗?参数中的temp是什么意思呢?我用任意一个int型的数都可以,为什么?问题三:
    在别人的源码中我经常看到这些语句:
    Inherited;
    FreeOnTerminate:=true;
    tempThread.onOermminate:=threadDone;
    请问是什么意思,有什么作用呢?线程中还有那些语句是经常用到的,各代表什么意思呢?问题四:
    当一个线程中没有任何循环语句,只是一个简单的赋值语句,请问执行完后线程是否会自动关闭或释放?问题五:
    我想在线程中使用DLL文件,请问应该写在线程的什么函数中?问题六:
    请问常用的线程函数(如:procedure Execute; override;等)有那些?
    各是起什么作用的?问题七:
    请问在线程中如何接收和传递消息,最好能举例说明!!为了保住饭碗,只有请各位大哥大姐多帮帮忙,小弟感激泣淋!

解决方案 »

  1.   

    1: 采用变量参数应该可以:
    比如: 
    function ss(var s:integer):string;
    begin
    end;2:从理论上讲,当线程的Execute()方法执行完毕后,就认为线程终止;系统调用EndThread()函数,在此函数中,又调用了ExitTread()过程,这个过程彻底清除了线程的堆栈并释放线程对象;
    其实在我们的应用程序退出时候,线程就会彻底自动释放,但为了在完成工作后就释放,不至于出现内存泄漏,可以设置TThread的FreeOnTerminate属性,这样,当线程的Execute()执行完毕后,它就会自动释放了! 问题3也就说明了这一点,说了这些,问题4也许你就应该明白,问题5我没有试过!  :)!
      

  2.   

    3,TerminateThread(tempThread.Handle, int temp);  并不安全
    4,线程中代码段执行玩会释放
    5,使用函数指针将dll函数地址传入线程中
    6,CreateThread, ExitThread,resumeThread, SupednThread, Sleep, TerminateThread等,如果不需要同步控制的话这些就够了
      

  3.   

    问题一:可用消息,信號量,winsock等;
    问题二:我覺得沒有絕對的安全,取決于你線程中的代碼,一般你在thread中用while not Terminated do begin ... end;
    然後,得到terminated,處理清理工作;
    TerminateThread并不安全;问题三:
    正常,我們要繼承TThread來構造我們自己的thread,那當然要Inherited  basic class的部分默認操作了;
    FreeOnTerminate:=true; 就是說在 thread 結束時自動釋放,不用再手工編寫釋放代碼,如果運行一次的線程,這樣處理也不錯! tempThread.onOermminate:=threadDone;
    不過是自定義結束時要執行的代碼而已;问题四:會自動關閉,是否自動釋放,取決于 FreeOnTerminate:=true;问题五:無限制,正常在 Execute 中;问题六:常用的,就是Execute,線程 create 完,正常會自動招生,除非你設置了;CreateSuspended 參數;问题七:可用PostThreadMessage,但如果你的消息不是很多的話,用信號量更好!
      

  4.   

    1:可以用PostThreadMessage发送消息来传递参数
    2:TerminateThread是强型关闭线程,不会释放占用的一些资源。
      用ExitThread 就比较的安全。
      

  5.   

    1:覆盖线程的create方法,如 create(a,b,c:integer);
    2:这个不安全的,最好是让线程自己释放
    3:FreeOnTerminate:=true;线程运行结束后是否自己释放
       tempThread.onOermminate:=threadDone;指定释放函数为threadDone
    4:取决于是否 FreeOnTerminate:=true;
    5:和一般程序中一样,写在线程单元中即可
    6:主要就这个procedure Execute,这是线程的执行代码,还有create等
    7:同aiirii(aiirii)
      

  6.   

    例子:
    C:\Borland\Delphi6\Demos\Threads
      

  7.   

    希望对你有帮助http://expert.csdn.net/Expert/topic/2178/2178905.xml?temp=.3893091