c# - 如何确保 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?换句话说,我需要这个程序是同步的。
我不打算为此使用多线程或同步进程。任何帮助表示赞赏。谢谢你。
解决方案
Thread.Sleep() 在调用它的任何线程上运行。您要么从不同的线程调用这些方法,要么在其中一种或两种方法中启动新进程或线程。
我猜你实际上在那里开始了一个新进程,并期望它在你的代码继续之前完成。如果是这种情况,您必须明确等待进程退出。
编辑:在 Process 引用上调用 WaitForExit() 以等待它完成。在线程上调用 Join() 以等待它完成。虽然如果这就是你所做的一切,那么开始一个新线程是没有意义的。似乎更有可能存在更多问题,您需要使用更复杂的同步,如锁或信号量。
推荐阅读
- reactjs - React - 绑定数据时显示消息
- python - 如何从 django 视图运行 python 脚本
- c# - 如何将变量放入列表内的对象中
- java - Java在Java程序中运行Main方法之后不要退出
- c++ - 当窗口管理器在 qt QML 中调整窗口大小时如何获得信号?
- coq - 无法在定义中使用 destruct tatic 的问题
- django - Django Rest API 在两个类中合并删除/获取/更新/获取方法
- mysql - 永远不要将容器设置为 'up' [docker]
- node.js - Please ensure that your service worker file contains the following:/(const precacheManifest =)\[\](;)/
- ios - How to show image from url in ios swift