在我的应用程序中,我有一个父线程。我想知道如果我暂停父线程的执行,子线程会发生什么?他们会继续执行还是会被暂停并等待父线程恢复执行?请帮帮我。
答案 0 :(得分:4)
线程实际上没有父/子关系 - 一旦线程启动,它就独立于创建它的线程。
(我担心你为父线程使用“suspend”这个词 - 暂停一个线程通常是一个坏主意。特别是,如果你的意思是调用Thread.Suspend
你应该知道那个已被弃用了。你的意思是什么?如果你想在线程之间协调工作,那就有更好的方法。)
示例代码,显示四个线程正在工作,暂停,恢复,然后流程终止:
using System;
using System.Threading;
public class A
{
static void Main()
{
// Start off unpaused
var sharedEvent = new ManualResetEvent(true);
for (int i = 0; i < 4; i++)
{
string prefix = "Thread " + i;
Thread t = new Thread(() => DoFakeWork(prefix,
sharedEvent));
// Let the process die when Main finished
t.IsBackground = true;
t.Start();
}
// Let the workers work for a while
Thread.Sleep(3000);
Console.WriteLine("Pausing");
sharedEvent.Reset();
Thread.Sleep(3000);
Console.WriteLine("Resuming");
sharedEvent.Set();
Thread.Sleep(3000);
Console.WriteLine("Finishing");
}
static void DoFakeWork(string prefix, ManualResetEvent mre)
{
while (true)
{
Console.WriteLine(prefix + " working...");
Thread.Sleep(500);
mre.WaitOne();
}
}
}
答案 1 :(得分:2)
线程在.Net中确实没有父子关系 - 所以挂起一个线程不会挂起碰巧由它创建的其他线程。
答案 2 :(得分:0)
简而言之,如果你的意思是child是从你调用parent的另一个线程开始的线程,那么没有子线程因为主线程被挂起而不会被挂起。 检查这个例子: http://www.codersource.net/microsoft-net/c-basics-tutorials/c-net-tutorial-multithreading.aspx