首页 > 解决方案 > 如何确保 Thread.Sleep() 是同步的?

问题描述

我用 C# 编写了一个进程,该进程依赖于一个进程运行 x 秒,该进程完成,然后运行另一个进程 y 秒。为方便起见,我使用Thread.Sleep(). 然而,实际发生的情况是第一个过程开始,第二个过程开始,两个过程分别在 x 和 y 秒后完成。这是一段代码:

core.ProcessOne(DurationX);
core.ProcessTwo(DurationY);
.
.
.
public void ProcessOne(double Time)
{
// Start Process
Thread.Sleep((Int32)(Time * 1000))
// End Process
}
public void ProcessTwo(double Time)
{
Thread.Sleep((Int32) MixingTime * 1000); // It's just a constant amount of time to wait
// Start Process
Thread.Sleep((Int32)(Time * 1000))
// End Process
}

如何解决此问题,以便流程 1 必须完成才能开始流程 2?换句话说,我需要这个程序是同步的。

我不打算为此使用多线程或同步进程。任何帮助表示赞赏。谢谢你。

标签: c#multithreading

解决方案


Thread.Sleep() 在调用它的任何线程上运行。您要么从不同的线程调用这些方法,要么在其中一种或两种方法中启动新进程或线程。

我猜你实际上在那里开始了一个新进程,并期望它在你的代码继续之前完成。如果是这种情况,您必须明确等待进程退出。

编辑:在 Process 引用上调用 WaitForExit() 以等待它完成。在线程上调用 Join() 以等待它完成。虽然如果这就是你所做的一切,那么开始一个新线程是没有意义的。似乎更有可能存在更多问题,您需要使用更复杂的同步,如锁或信号量。


推荐阅读