关于主线程事件通知子线程的信息

来源网友投稿 717 2022-12-29

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。
本篇文章给大家谈谈主线程事件通知子线程,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享主线程事件通知子线程的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Handler:主线程如何通知子线程

Handler对象在主线程中创建,主线程中的消息队列由Handler对象来管理。
由于在同一进程中的的线程共享内存,所以子线程可以获取到主线程中的handler对象。
获取到handler,通过handle可以把Message插入到主线程消息队列中。
主线程消息队列依次把队列中的Message对象交由主线程处理。

主线程怎么给子线程发送消息

如是窗口程序主线程事件通知子线程,让子线程向主线程创建的窗口发自定义消息,用SendMessage(子线程会待主线程处理完毕)或PostMessage(子线程发送消息后就继续自己的事)。
如果不是窗口程序,就必需让主线程轮询,可以用一个flag,子线程设置flag,主线程定期检查flag,如果被置位,则进行相应处理并将flag复位。flag用临界区保护,这种方法除主线程事件通知子线程了在两个线程同时入临界区时以外,主线程不会被阻塞。当然也可以用Event,子线程SetEvent,主线程定期WaitForSingleObject,把超时设为1。如果子线程需要等待主线程的处理,就再加一个Event,子线程设置flag/触发Event1之后等特第二个Event,主线程处理完毕后触发第二个Event。

Android:主线程如何向子线程发送消息

因为你是在主线程创建的handler实例,比如你是这样实例化handler

那么我们进到handler源码看一下

可以看到这里会调用重载的另外一个构造方法,我们再跟进

我们可以看到 mLooper=looper.myLooper();  这是获取当前线程的looper实例,也就是主线程的looper。所以当发送消息的时候主线程就可以获取到消息。往下看系统还会mLooper是否为空,如果为空就会抛出异常,意思是当前线程没有looper实例,这也是我们在子线程中没有创建looper的实例的时候创建handler会报错的原因,主线程不会报错是因为程序在启动的时候在activitythread中的main方法就创建了looper实例,看系统源码

然后调用looper.loop();就开始了消息循环。这就是为什么在主线程发消息住线程还能收到消息的原因。因为发送消息的实例是在主线程实例化的就有了主线程的looper。

如何使用Handler实现主线程往子线程传递消息

myThread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (handler == null) {
Looper.prepare();
handler = new Handler(Looper.myLooper()){//这里加上
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch(msg.what){
case do_some_th:break;
}
}
};
myHandler.sendEmptyMessage(1);
Looper.loop();
Log.e("", "这是消息循环开始之后的代码");
}
}
});
//主线程给子线程发消息:
在主线程里面调用handler.sendEmptyMessage(do_some_th);就可以执行了。 关于主线程事件通知子线程和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 主线程事件通知子线程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、主线程事件通知子线程的信息别忘了在本站进行查找喔。
上一篇:电气设备故障智能预警(电气设备故障应急预案)
下一篇:二维码门禁助力联合办公实现出入管理更智能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~