我有两个辅助线程,它们执行如下所述的 WriteX 方法:
static void Main(string[] args)
{
ThreadStart one = new ThreadStart(WriteX);
Thread startOne = new Thread(one);
ThreadStart two = new ThreadStart(WriteX);
Thread startTwo = new Thread(two);
startOne.Start();
startTwo.Start();
Console.ReadKey(true);
}
public static void WriteX()
{
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("Hello");
Thread.Sleep(1000);
}
}
( 1 ) 我如何找到“startOne”和“startTwo”完成任务所花费的时间(以毫秒为单位)?
( 2 ) 我启动了线程 (Start() )。我是否需要在成功执行后停止线程,或者由主线程处理(在本例中为 Main())?
(3) 我如何打印消息说,startOne 正在执行 WriteX() 方法而 startTwo 正在执行 WriteX() 方法?
最佳答案
在每个严肃的日志记录框架中,您都可以在输出消息中包含线程 ID 或线程名称。如果您只想使用控制台,您可能需要手动将当前线程 ID/名称附加到您的消息中。
像这样:
public static void WriteX()
{
var sw = Stopwatch.StartNew();
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("Hello");
Thread.Sleep(1000);
}
sw.Stop();
Console.WriteLine("{0} {1}",
Thread.CurrentThread.ManagedThreadId,
sw.Elapsed);
}
要命名线程,只需使用线程实例的 Name 属性:
ThreadStart one = new ThreadStart(WriteX);
Thread startOne = new Thread(one);
startOne.Name = "StartOne";
//...
Console.WriteLine("{0} {1}", Thread.CurrentThread.Name, sw.Elapsed);
此外,当您作为 ThreadStart
构造函数参数传递的方法完成时,线程会自动结束。如果要等待主线程中的线程结束,请使用 Join
方法。
关于c# - 线程——执行时间的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542545/