社区
C#
帖子详情
Thread.join()的引申问题
jason19880221
2011-12-14 11:13:25
join的意思我理解了,就是堵塞当前主进程去执行新进程。但是我现在有个疑问,我启动两个线程就是防止程序假死在那里的,开个新线程去读取设备,但是有可能这个设备根本没有连接,也就是说新线程会卡在那,那是不是我的程序又假死了?
不知道大家能不能看懂。
...全文
85
11
打赏
收藏
Thread.join()的引申问题
join的意思我理解了,就是堵塞当前主进程去执行新进程。但是我现在有个疑问,我启动两个线程就是防止程序假死在那里的,开个新线程去读取设备,但是有可能这个设备根本没有连接,也就是说新线程会卡在那,那是不是我的程序又假死了? 不知道大家能不能看懂。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jason19880221
2011-12-28
打赏
举报
回复
[Quote=引用 10 楼 fangxinggood 的回复:]
子线程回调就是:让子线程来通知UI是否完成,而不是UI等着子线程。
可以用 Delegate.BeginInvoke,传入callback delegate,
或者用 .net 4.0 ATP 的 async,await直接转化成 Event based Async Pattern
只要UI等子线程完成,就一定会挂死。
[/Quote]
哦,我明白点了
机器人
2011-12-14
打赏
举报
回复
子线程回调就是:让子线程来通知UI是否完成,而不是UI等着子线程。
可以用 Delegate.BeginInvoke,传入callback delegate,
或者用 .net 4.0 ATP 的 async,await直接转化成 Event based Async Pattern
只要UI等子线程完成,就一定会挂死。
jason19880221
2011-12-14
打赏
举报
回复
[Quote=引用 7 楼 fangxinggood 的回复:]
看你想做什么了。一般就让子线程回调
[/Quote]
子线程回调,是invoke么
jason19880221
2011-12-14
打赏
举报
回复
[Quote=引用 3 楼 zyloveyrf 的回复:]
主线程也会阻塞?
catch?
防止假死可以这样啊
比如:
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = sender as BackgroundWorker;
……
[/Quote]
这个……我看不懂。呵呵
其实我觉得我这个方法也不错,子线程去采集数据,采集回来给主线程,然后主线程继续走
机器人
2011-12-14
打赏
举报
回复
看你想做什么了。一般就让子线程回调
机器人
2011-12-14
打赏
举报
回复
[Quote=引用 2 楼 gomoku 的回复:]
那你就不能在UI线程下Join。
[/Quote]
UI 线程里join 那两个连接设备的子线程,UI就会卡死...
jason19880221
2011-12-14
打赏
举报
回复
[Quote=引用 2 楼 gomoku 的回复:]
那你就不能在UI线程下Join。
[/Quote]
那还有其他办法么,难道还要建个线程?
jason19880221
2011-12-14
打赏
举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
线程不会阻塞主线程
[/Quote]
你的意思是说,他们还是同步执行的?
萧炎
2011-12-14
打赏
举报
回复
主线程也会阻塞?
catch?
防止假死可以这样啊
比如:
private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker backgroundWorker = sender as BackgroundWorker;
Execute(backgroundWorker, e);
}
线程启动用
if (!backgroundWorker1.IsBusy)
backgroundWorker1.RunWorkerAsync();
那么增加东西的时候就可以对窗体进行操作。
gomoku
2011-12-14
打赏
举报
回复
那你就不能在UI线程下Join。
bdmh
2011-12-14
打赏
举报
回复
线程不会阻塞主线程
16天入门物联网操作系统——RT-
Thread
课程概述: RT-
Thread
是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-
Thread
也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗...
多线程中
join
( )方法的使用
你好,多线程
join
()方法了解一下~~先写一个子线程public class My
Thread
extends
Thread
{ public My
Thread
(String name){ super(name); } @Override public void run(){ for(int i=0;i<=20;i++){ ...
JAVA多线程:守护线程 setDaemon全方位剖析| 守护线程是线程吗 |
thread
.isAlive()反思(五)
本文目的,通过短小精悍的实例,让你在最短时间,全面揭晓
thread
.setDaemon(true)守护线程的使用,及其使用场景。一看就懂,一学就会! 其作用主要是用来,来让其(这里暂称之为子线程)随着调用它的主线程(这里暂...
Java的wait(),
join
(), sleep, lockSupport.park, 线程阻塞,等待,挂起等状态详解
以下方法: * sleep
Thread
.sleep * Object#wait(long) *
join
(long)
Thread
.
join
* LockSupport#parkNanos LockSupport.parkNanos * LockSupport#parkUntil LockSupport.parkUntil */ TIMED_WAITING, /** *
Thread
...
Thread
源码分析之
join
方法
引申
--wait 为何一定要写在同步代码块中
分析
join
的源码,结合wait的使用套路,可以得到这个结论。 假设线程I调用t.
join
()。t.
join
()最终调用的是t.wait()。 t.
join
()方法是synchronized 方法。所以线程I中运行到t.
join
(),是线程I拿到了对象t的锁...
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章