Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >主线程等待多个后台工作线程完成

主线程等待多个后台工作线程完成
EN

Stack Overflow用户
提问于 2014-03-06 23:30:55
回答 3查看 878关注 0票数 1

我产生了多个后台工作者线程,并希望我的主线程等到所有线程都完成。解决方案是在每次生成后台工作者线程时向列表中添加一项,然后在RunWorkerCompleted中删除它们。但是,如何将列表作为参数传递给RunWorkerCompleted?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FuncA()
{
 foreach()
 {
    /* add an item to the list */
   _bw.RunWorkerAsync();
 }
 m_event.WaitOne(); /* Main thread waits here */
}
static bw_DoWork()
{

}
static bw_RunWorkerCompleted()
{ 
    /* delete item from list */
    /* if list is empty signal m_event.Set() */
}
EN

回答 3

Stack Overflow用户

发布于 2014-03-06 23:39:23

await中使用第三方公共关系使这一点变得非常简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void someEventHandler()
{
    var results = await Task.WhenAll(
        Task.Run(() => ComputeSomeValue()),
        Task.Run(() => ComputeSomeOtherValue()),
        Task.Run(() => ComputeYetAnotherValue()));
    DoSomethingWithResults(results);
}

对于.NET 4.0解决方案,可以在不使用await的情况下使用任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void someEventHandler()
{
    Task.Factory.ContinueWhenAll(new[]{
        Task.Run(() => ComputeSomeValue()),
        Task.Run(() => ComputeSomeOtherValue()),
        Task.Run(() => ComputeYetAnotherValue())}
        , resultTask => DoSomethingWithResults(resultTask.Result);
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-07 05:32:19

在调用_bw.RunWorkerAsync()时,可以将列表作为参数传递。RunWorkerAsync方法有一个重载方法,它接受一种类型的对象作为参数。

您可以在bw_DoWork事件结束时而不是在bw_RunWorkerCompleted事件中从list中删除项。后者应该在更新某些UI元素时使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<object> list = new List<object>();
FuncA()
{
    foreach()
    {
        /* add an item to the list */
       _bw.RunWorkerAsync(list);
     }
    m_event.WaitOne(); /* Main thread waits here */
}
static bw_DoWork()
{
    // Do the stuff.

    /* delete item from list */
    var list = e.Argument as List<object>;
    /* if list is empty signal m_event.Set() */
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-07 00:12:25

如果您使用的是.NET Framework4或更高版本,则可以使用System.Threading.CountdownEvent。在FuncA()中,在启动后台工作程序之前,您必须使用大量对象初始化信号,并且在WorkerCompleted处理程序中,您应该调用CountdownEvent的CountdownEvent ()方法。在线程中,您必须调用CountdownEvent的Wait()方法,然后在该方法之后调用所有代码,这些代码必须在稍后执行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22238418

复制
相关文章
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源
本文讲解了 Java 中线程死锁的语法和应用场景,并给出了样例代码。线程死锁是指在多线程编程中,两个或多个线程被永久地阻塞,等待彼此持有的资源,而无法继续执行下去。
Designer 小郑
2023/08/18
6390
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源
C#多线程(11):线程等待
前面我们学习了很多用于线程管理的 类型,也学习了多种线程同步的使用方法,这一篇主要讲述线程等待相关的内容。
痴者工良
2021/04/26
2.3K0
后台线程和ui线程
后台线程 mfc AfxBeginThread创建函数或者对象中的静态函数 dotnet Task.Run或者new Thread ui线程 mfc 继承CWinThread、给子类绑定dialog,窗口在独立的线程中初始化和析构。 class CUIThread : public CWinThread { DECLARE_DYNCREATE(CUIThread) protected: CUIThread(); // 动态创建所使用的受保护的构造函数 virt
sofu456
2020/02/18
5150
使用Disruptor完成多线程下并发、等待、先后等操作
场景1:一个线程等待其他多个线程都完成后,再进行下一步操作(如裁判员计分功能,需要等待所有运动员都跑完后,才去统计分数。裁判员和每个运动员都是一个线程)。
天涯泪小武
2019/01/17
1.9K0
JUC - 线程中断与线程等待、唤醒(LockSupport)
​ 首先 ​ 一个线程不应该由其他线程来强制中断或停止,而是应该有线程自己自行停止,自己来决定自己的命运。 ​ 所以,Thread.stop, Thead.suspend, Thead.resumer都已经被废弃了。
鱼找水需要时间
2023/02/16
9200
JUC - 线程中断与线程等待、唤醒(LockSupport)
线程的通知与等待
Java中的Object类是所有类的父类,鉴于继承机制,Java把所有的类都需的方法放在了Object类里面,其中就包含要说的通知与等待。
YanL
2020/04/29
1.1K0
线程的通知与等待
前台线程和后台线程总结
.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。
wfaceboss
2019/04/08
1.9K0
win10 uwp 线程池 为什么需要线程池什么是线程池线程池原理应用等待代码完成定时器
如果大家有开发 WPF 或以前的程序,大概知道线程池不是 UWP 创造的,实际上在很多技术都用到线程池。 为什么需要线程池,他是什么?如何在 UWP 使用线程池,本文就是来告诉大家这些
林德熙
2018/09/18
1.2K0
win10 uwp 线程池
            为什么需要线程池什么是线程池线程池原理应用等待代码完成定时器
executorservice等待线程池执行完毕_java线程池策略
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
1.3K0
executorservice等待线程池执行完毕_java线程池策略
使用线程自己join自己完成线程门栓
public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new Runnable() { @Override public void run() { try { //这里可以放一个变量看看是否是0,只有1和0两种状态,当为0时,才可以进行后续代码,
gzq大数据
2022/05/11
2120
[javaSE] 多线程通信(等待-唤醒机制)
两个线程操作同一个资源,比如,输入和输出,操作同一个对象,此时两个线程会争夺cpu的执行权,随机的进行切换。我们想实现先输入再输出,顺序的执行
唯一Chat
2019/09/10
6630
[javaSE] 多线程通信(等待-唤醒机制)
C#多线程(8):线程完成数
假如,程序需要向一个 Web 发送 5 次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。
痴者工良
2021/04/26
5170
java 主线程等待子线程执行完后再执行
示例如下,我们初始化一个CountDownLatch,值为10(子线程个数),然后每次一个子线程执行完后执行一下countDown(),代码示例如下:
IT云清
2019/01/22
4.6K0
java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行。
菩提树下的杨过
2018/09/20
3.6K0
WPF 在触摸线程等待主线程窗口关闭会让主线程和触摸线程相互等待 原理方法一方法二
本文是记录一个线程相互等待导致主线程无法响应的问题,这个问题是属于一定可以复现的问题,是 WPF 的已知问题。如果遇到这个问题,属于暂时没有方法解决,只能规避。 这个问题的最简单复现步骤是在触摸线程,也就是 StylusInput 线程,等待一个主线程的窗口关闭,此时就会出现主线程卡住的问题
林德熙
2019/03/13
1.2K0
【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
1. 线程创建方法函数原型 : int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, (void*)(*start_rtn)(void*), void *arg);
韩曙亮
2023/03/27
2.3K0
【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )
多线程是同时执行多个线程的吗
相信多线程各位大佬都用过,不管是在单核cpu还是多核cpu上都可以执行,但是多线程是同时执行多个线程的吗?
余生大大
2022/11/02
1.1K0
多线程并发之CountDownLatch阻塞等待
CountDownLatch中count down是倒数的意思,latch则是门闩、锁住的含义。整体含义可以理解为倒数的门栓。CountDownLatch的作用也是如此,在构造CountDownLatch的时候需要传入一个整数n(必须>0),在这个整数“倒数”到0之前,主线程需要等待在门口,而这个“倒数”过程则是由各个执行线程驱动的,每个线程执行完一个任务“倒数”一次。总结来说,CountDownLatch的作用就是等待其他的线程都执行完任务,必要时可以对各个任务的执行结果进行汇总,然后主线程才继续往下执行。
鱼找水需要时间
2023/02/16
8210
多线程并发之CountDownLatch阻塞等待
第十七节:Runnable创建线程,Thread创建线程,唤醒线程和计数器多线程,线程同步与等待
标题图 Runnable创建线程 public class RunnableDemo implements Runnable{ @Override public void run(){ int i = 1; while(true) { System.out.println(Thread.currentThread().getName()+"线程名字"+i); i++; if(i>30){ break; } try{ Thread.currentThr
达达前端
2019/07/03
6630
第十七节:Runnable创建线程,Thread创建线程,唤醒线程和计数器多线程,线程同步与等待
点击加载更多

相似问题

等待后台线程完成

30

如何让UI线程等待后台线程完成?

40

为什么主线程要等待后台线程完成?

28

正在等待多个后台线程

40

异步等待多个线程完成

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文