none
线程基本问题 RRS feed

  • 问题

  • 问,
    1.主线程是如何定义的,如何区别于其他线程?
    2.如果在主线程中调用一个子线程,我想cancel 掉子线程,该怎么做?是不是要block主线程,然后等待子线程结束才能中止掉子线程?

    请专家解惑,谢谢!
    2009年12月18日 6:12

答案

  • 你建立一个程序,就是一个进程,其中包含一个线程,这个就是主线程,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。

    如果需要cancel掉子线程 可以通过Thread.Join()这个会等到线程执行完毕后终止
    ;Thread.Abort 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月18日 6:31
    版主
  • 你好!
         你似乎有一定的误解:
         Thread.Join()方法:
         阻塞当前线程,直到某个线程终止,这个方法本身无法终止线程,只是等待!
         例如:
            static void Main(string[] args)
            {
                   myThread.Join();     //阻塞当前主线程,直到myThread线程终止
             }
     

          Thread.Abort()方法:
    在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
        
    周雪峰
    2009年12月18日 8:36
    版主
  • 通过你的描述,我感觉你还是没有理解啊!
    myThread.Join();方法只是阻塞当前主线程,一直等待myThread线程的终止,至于这个myThread线程何时终止,是myThread自己来决定的,和Join方法无关,他只是被动的等待myThread的终止,一旦myThread终止了,当前线程就继续执行后面的代码了!
    过程是这样的,希望这个解释对你有些帮助!
    周雪峰
    2009年12月18日 11:20
    版主

全部回复

  • 你建立一个程序,就是一个进程,其中包含一个线程,这个就是主线程,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。

    如果需要cancel掉子线程 可以通过Thread.Join()这个会等到线程执行完毕后终止
    ;Thread.Abort 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月18日 6:31
    版主
  • 那就是说thread.join() 和 thread.Abort()都可以达到结束线程的功能? 那它们又有何区别呢? 是不是等效的? 有没有不同的应用场景?
    2009年12月18日 6:37
  • 你好!
         你似乎有一定的误解:
         Thread.Join()方法:
         阻塞当前线程,直到某个线程终止,这个方法本身无法终止线程,只是等待!
         例如:
            static void Main(string[] args)
            {
                   myThread.Join();     //阻塞当前主线程,直到myThread线程终止
             }
     

          Thread.Abort()方法:
    在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
        
    周雪峰
    2009年12月18日 8:36
    版主
  • 哦,对于.join(), 也就是等到myThread的线程方法执行完了才结束该子线程,而Abort()就是中止此线程不管它的线程方法有没有执行结束,这样理解对吧? 谢谢

    2009年12月18日 10:26
  • 通过你的描述,我感觉你还是没有理解啊!
    myThread.Join();方法只是阻塞当前主线程,一直等待myThread线程的终止,至于这个myThread线程何时终止,是myThread自己来决定的,和Join方法无关,他只是被动的等待myThread的终止,一旦myThread终止了,当前线程就继续执行后面的代码了!
    过程是这样的,希望这个解释对你有些帮助!
    周雪峰
    2009年12月18日 11:20
    版主
  • 谢谢,我想我应该是理解了
    2009年12月19日 12:26
  • 太好了!
    不用客气啊!
    周雪峰
    2009年12月19日 14:24
    版主