等待两个线程完成

2023-12-15

如果您有一个主线程启动另外两个线程。 让主线程等待其他两个线程的最干净的方法是什么?

我可以使用 bgndworker 和 sleep spinner 来检查 bgnd 工作人员的 IsBusy,但我认为有更好的方法。

EDIT还有一些要求:

  • 主线程还有一些其他工作要做(例如 GUI)。
  • 两个生成的线程应该能够报告异常并返回结果值

使用 Thread.Join(); 的快速示例

        Thread t1 = new Thread(new ThreadStart(delegate()
        {
            System.Threading.Thread.Sleep(2000);
        }));

        Thread t2 = new Thread(new ThreadStart(delegate()
        {
            System.Threading.Thread.Sleep(4000);
        }));

        t1.Start();
        t2.Start();

        t1.Join();
        t2.Join();

使用等待句柄编辑另一个 3 示例:

            ManualResetEvent[] waitHandles = new ManualResetEvent[]{
            new ManualResetEvent(false),
            new ManualResetEvent(false)
        };

        Thread t1 = new Thread(new ParameterizedThreadStart(delegate(object state)
        {
            ManualResetEvent handle = (ManualResetEvent)state;
            System.Threading.Thread.Sleep(2000);
            handle.Set();
        }));

        Thread t2 = new Thread(new ParameterizedThreadStart(delegate(object state)
        {
            ManualResetEvent handle = (ManualResetEvent)state;
            System.Threading.Thread.Sleep(4000);
            handle.Set();
        }));

        t1.Start(waitHandles[0]);
        t2.Start(waitHandles[1]);

        WaitHandle.WaitAll(waitHandles);

        Console.WriteLine("Finished");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待两个线程完成 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 键为数组类型的哈希

    如何在 Go 中为地图创建一个键作为数组 例如在 ruby 中我可以这样实现 quarters 1 2 3 gt First quarter 4 5 6 gt Second quarter 7 8 9 gt Third quarter 10
  • WSL Ubuntu(Linux 的 Windows 子系统)上没有互联网连接 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 最近我安装了WSL Ubuntu 18 04在我的 Windows 机器上 但似乎没有任何东西可以正常工作 因为我有不能访问网络 我尝试了一些命令sudo apt update说 连
  • ld:未找到架构 x86_64 的符号 - 错误

    我正在尝试在 Mac OS Catalina 10 15 2 上的 VSCode 上运行代码 我在这个函数上遇到了这个错误 g main cpp Undefined symbols for architecture x86 64 nalea
  • 如何使用空手道测试下载 api

    我有一个用于文件下载的 api txt doc csv 在java中使用spring框架 我想使用空手道进行验收测试 我该怎么做 这是我的代码 RequestMapping path download method RequestMetho
  • 未配置名为“_tkinter”的模块

    ModuleNotFoundError 没有名为 tkinter 的模块 我想在Python 3 7中导入turtle 回溯 最近一次调用 文件 my py 第 1 行 位于 fromturtle import 文件 usr local l
  • 填充剩余的垂直空间 - 仅 CSS

    我需要填写剩余垂直空间 of wrapper under first with second div 我需要一个唯一的 CSS 解决方案 wrapper width 300px height 100 first width 300px he
  • 短信开发入门

    我将进行以下设置 人们将向服务器发送短信 该服务器将把消息转发到其他电话号码 我不确定我应该使用什么样的框架 我应该开发一个短信网关并使用AT命令吗 我应该尝试以某种方式使用 AIM 或 GCHAT 来捕获和发送 SMS 消息吗 还有其他更
  • SSRS 矩阵中的交替行颜色表达式无法正常工作

    在唯一的行组中 我尝试使用以下表达式获取替代行颜色 背景颜色的表达式 IIf RunningValue Fields SP Value CountDistinct Nothing MOD 2 White blue SQL code sele
  • 测试未发布的 Apps 脚本加载项的安装

    我正在开发一个容器绑定Apps 脚本插件 我需要演示安装过程作为OAuth验证流程 如果没有 OAuth 验证 我无法发布我的附加组件 并且似乎没有任何其他方法来演示安装 我考虑过的一些选择是 作为私人附加组件发布 然而 这对我来说不是一个
  • 为什么 C++ 关联容器谓词默认不透明?

    从 C 14 开始 我们有std less
  • 将公式应用于整列时保持单元格引用相同

    我这里有这个公式 IFERROR IF D4 lt 0 0 VLOOKUP A4 Civil Maintenance A5 C46 3 FALSE C4 VLOOKUP A4 Civil Maintenance A5 C46 3 FALSE
  • 使用子命名空间自动加载我的类 (Composer.json)

    我已将以下内容添加到我的composer json文件 这工作正常 但我有一个很长的子命名空间列表 例如Apple Orange Lemon Pear Banana 等 我想包括在内 1 我是否必须指示每个子命名空间或者是否有快捷方式 例如
  • 如何可视化各种日期时间格式的显示方式?

    我希望能够快速参考各种 DateTime 格式的显示方式 而不是开始费力的编辑 编译 呆滞和递归过程 直到满意为止 这显示了当前文化的所有格式 StringBuilder sb new StringBuilder foreach strin
  • Spring Data Neo4J 4.0.0:BeforeSaveEvent 未触发?

    我试图在Spring中设置Neo4J时捕获BeforeSaveEvent 以便我可以调用一个方法beforeSave 在正在保存的类上 不幸的是 它似乎没有被注册为侦听器 因为我的打印语句没有被执行 想法表示赞赏 Configuration
  • 使用 GNU 汇编的主引导记录:平面二进制输出中的额外字节

    我尝试编译以下简单的 MBR code16 globl start text start end jmp end Don t bother with 0xAA55 yet 我运行以下命令 gt as 32 o boot o boot s g
  • 如何使用 Selenium 播放和暂停视频?

    任何人都可以帮助我如何使用 Selenium 自动播放 暂停网页上的视频 提前致谢 这很大程度上取决于处理视频的浏览器和播放器 您很可能需要使用 JavaScript 执行器 昨晚我和一个朋友讨论了这个问题 他使用 Webdriver 的
  • Python-在不同类的不同实例之间共享变量[重复]

    这个问题在这里已经有答案了 我一直在寻找下一个答案 但可以肯定的是我一直在搜索错误的关键字 我曾经使用 C 进行开发 在对象之间传递指针作为引用 情况是 现在我正在尝试用 Python 构建一个程序 其中 General 类的一个实例使用相
  • oracle中使用rownum获取数据

    我在 oracle 中有一个查询 使用以下命令从表中获取数据rownum但我没有得到任何数据 我的查询是这样的 select from table name where rownum lt 5 这是一个错误的查询来获取行号小于 5 的数据
  • 我想在 C# 中找到 4x4 矩阵的行列式 [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中计算 NxN 矩阵行列式 我想在 C 中找到 4x4 矩阵的行列式 int ss 4 int count 0 int matrix new int ss ss ArrayList al ne
  • 等待两个线程完成

    如果您有一个主线程启动另外两个线程 让主线程等待其他两个线程的最干净的方法是什么 我可以使用 bgndworker 和 sleep spinner 来检查 bgnd 工作人员的 IsBusy 但我认为有更好的方法 EDIT还有一些要求 主线