线程的问题:
1、什么是多线程?
procedure Tfrmjianting.Button1Click(Sender: TObject);
begin
      ClientHandleThread := TClientHandleThread.Create(True);
      ClientHandleThread.Resume; //开始执行
end;
这样的话是不是每次点这个按钮,都会产生一个线程?那他们不都是叫一个名字了吗?多线程是不是必须我手动创建?比如:
ClientHandleThread1,ClientHandleThread2: TClientHandleThread;
2、线程同步:能把这个概念给我讲详细些吗?
AThread.Synchronize(AddLogEntry);
这样的意思是不是athread这个线程创建了一个子线程,来执行AddLogEntry这个过程?或者是
是不是为“AddLogEntry”这个过程加个锁似的?
AddLogEntry这个过程还是在AThread分配的内存里执行的 ?3、主线程、父线程、子线程,这些是怎么区分的?有什么标志吗?

解决方案 »

  1.   

    去猛禽的专栏,看他的线程类的解释。http://www.csdn.net/develop/author/netauthor/raptor/
      

  2.   

    TThread是一个abstract(抽象)类,也就是说,并不需要根据TThread来声明变量(而且根据TThread声明的变量也是完全无用),我们要做的是把TThread作为基类,用继承的形式来生成子类。
    ----多线程同时执行,将会引起对共享资源的冲突。为避免冲突,就要用同步多线程对共享资源进行访问。WIN95提供了许多保持线程同步的方法,笔者采用创建事件对象来保持线程同步。通过CraeteEvent()创建事件对象,使用SetEvent()或PulseEvent()函数将事件对象设置成信号同步。在应用程序中,利用WaitSingleObject()函数等待同步的触发,等到指定的事件被其它线程设置为有信号时,才继续向下执行程序。
      

  3.   

    同意 xinshiji(无名) 
      

  4.   

    1.只要你保证你的线程resume后就能自己负责直到线程执行完毕,而不必再对它进行控制,那就不用创建多个不同名字的线程了;
    2.窗体主线程里走的。
      

  5.   

    1、什么是多线程?
    是的,如果这个线程不结束的话,每按一次就会产生一个新的线程。
    因为:首先,你这个线程Object没有释放,所以只要这个Object的线程还在执行(Execute没有返回),线程就会存在;其次,并不是都是一个名字,而是在你第二次按这个按钮时,前一个线程Object的引用就被丢失了,这样就无法显式释放这个线程Object,除非使用FreeOnTerminate让它在线程结束后自动释放,否则将出现MemLeak;最后,多线程不一定是手工创建,比如采用线程阻塞方式的网络控件(SERVER SIDE)在每个新的客户端连接时都会自动创建一个新的线程。2、线程同步:能把这个概念给我讲详细些吗?
    关于Synchronize我的文章里已经说的很清楚了,自己去看看。3、主线程、父线程、子线程,这些是怎么区分的?有什么标志吗?
    没什么标志,线程都是平等的,只是有时为了表达方便才加以区别。
    对于单线程应用来说,每个进程就只有一个线程,这个线程就是主线程,其它的线程一般来说都是由这个主线程创建(远程线程除外),所以其它的线程都是它的子线程,而它是所有子线程的父线程,如果子线程再创建子线程,则创建者是被创建者的父线程,被创建者是创建者的子线程。
    但要记住,父线程并不表示比子线程级别高(插一句,这里说的级别也不是指优先级),并没有更多的特权,线程在创建后都是平等的,父线程结束并销毁对子线程完全没有影响。
    但主线程是个例外,因为它与进程是一一对应的,主线程的结束就标志着进程的结束,而进程结束时会销毁所有此进程中的线程,不论它是否结束。
      

  6.   

    概念大家说的很多了,我斗胆说说设计的问题,请大家斧正。
    创建新的进程(包括其他类的实例),最好不要直接在client new,使用工厂模式去创建它。
    至于是否是多线程,看你的需要,如果你只想有一个实例,那么就使用单例模式,让它自己创建
      

  7.   

    Synchronize(AddLogEntry),在《Delphi 5开发人员指南》里说,是把AddLogEntry的代码放到主线程里去运行,为什么这样做呢?这样就能同步了吗?
      

  8.   

    Synchronize(AddLogEntry),在《Delphi 5开发人员指南》里说,是把AddLogEntry的代码放到主线程里去运行,为什么这样做呢?这样就能同步了吗?
      

  9.   

    Synchronize(AddLogEntry),在《Delphi 5开发人员指南》里说,是把AddLogEntry的代码放到主线程里去运行,为什么这样做呢?这样就能同步了吗?
      

  10.   

    Synchronize(AddLogEntry),在《Delphi 5开发人员指南》里说,是把AddLogEntry的代码放到主线程里去运行,为什么这样做呢?这样就能同步了吗?
      

  11.   

    >关于Synchronize我的文章里已经说的很清楚了,自己去看看。如果还不懂,偶也没办法了,你大概还需要找本《操作系统原理》方面的教科书来看看。