dispatch_async 子线程,主线程的简单用法

子线程的使用方法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
     //子线程的处理逻辑
});
DISPATCH_QUEUE_PRIORITY_DEFAULT 代表队列的优先级,包含以下参数

 DISPATCH_QUEUE_PRIORITY_HIGH, 

 DISPATCH_QUEUE_PRIORITY_LOW,  

 DISPATCH_QUEUE_PRIORITY_BACKGROUND

 0 是一个保留值,暂时没有任何效果,默认传个0就可以了

主线程的使用方法:

dispatch_async(dispatch_get_main_queue(), ^{
     //主线程的处理逻辑
});

如果子线程里面还需要更新一些UI之类的操作,这个时候就需要在主线程里面去完成,就是说子线程里面可以嵌套主线程,具体的使用方法如下:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
     //子线程的处理逻辑

    dispatch_async(dispatch_get_main_queue(), ^{
        //主线程更新UI之类的操作
    });

});
时间: 2024-07-31 15:59:25

dispatch_async 子线程,主线程的简单用法的相关文章

在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函数

在多线程编程中,通常都需要线程间的同步,一个线程要等待另一个线程的事件才继续执行,一般的做法是采用WaitForSingleObject和WaitForMultipleObjects()函数来实现. 但在实际的应用中,经常出现等待线程卡死的状况,也就是说等待的事件一直无效.为什么事件一直无效呢?很多的情况是等待线程阻塞了另外的线程,使另外的线程无法设置事件有效.为什么会阻塞呢?原因就比较多了,需要具体问题具体分析. WaitForSingleObject和WaitForMultipleObjec

Android开发——实现子线程更新UI

Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行耗时过长的代码,比如说下载文件等任务 一般情况,子线程中执行过长的代码,都是需要进行更新UI操作. 但是Android中,为了防止安全,是不允许在子线程更新UI的,但是我们可以使用到Android官方给予的API来实现子线程更新UI的操作(本质上,这些API也是切换回了主线程来进行更新UI) 例子:

Android之——任意时刻从子线程切换到主线程的实现(插曲)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45951149 一.引入 在Android开发中常常会遇到网络请求,数据库数据准备等一些耗时的操作:而这些操作是不允许在主线程中进行的.因为这样会堵塞主线程导致程序出现未响应情况. 所以只能另起一个子线程进行这些耗时的操作,完成后再显示到界面.众所周知,界面等控件操作只能在主线程中完成:所以不可避免的需要从子线程切换到主线程. 二.方法 对于这样的情况在Android 中比较常见的

[Android] 任意时刻从子线程切换到主线程的实现

======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 网站:www.qiujuer.net 开源库:Genius-Android 转载请注明出处:http://blog.csdn.net/qiujuer/article/details/41599383 ========================================================

Java多线程--让主线程等待所有子线程执行完毕

数据量很大百万条记录,因此考虑到要用多线程并发执行,在写的过程中又遇到问题,我想统计所有子进程执行完毕总共的耗时,在第一个子进程创建前记录当前时间用System.currentTimeMillis()在最后一个子进程结束后记录当前时间,两次一减得到的时间差即为总共的用时,代码如下 Java代码   long tStart = System.currentTimeMillis(); System.out.println(Thread.currentThread().getName() + "开始&

Android Handler主线程和一般线程通信的应用分析

Handler的定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI.解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作.如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会

关于android主线程异常NetworkOnMainThread不能访问网络

在Android开发中,如果你使用的是Android4.0以后,那你会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(aplication Not Response)异常 在Android API>9 (Honeycomb及之后)版本里,对UI线程/主线程里是不允许联网操作的,如果有网络操作,会抛出NetworkOnMainThreadException的异常. 就针对此问题有两种解决的方法: 1.忽略这些强

QT多线程的简单使用,主线程发一份数据,子线程收两份数据

先看效果图,示例发送数据“Hello World” 主线程:0x16f54aeda20,另两个子线程分别是0x4f1baff690.0x4f1baff6a0 因为在子线程中加了200ms.400ms延迟,所以打印是有先后顺序的 核心代码也就一丢丢.代码逻辑就是使用信号与槽使用线程之间产生联系 1 MfBusiness::MfBusiness(QObject *parent) : QObject(parent) 2 { 3 connect(&se,&MfSendData::Sgl_Send,

主线程和子线程的同步控制

一个线程的结束有两种途径,一种是象我们以下的样例一样.函数结束了.调用它的线程也就结束了.还有一种方式是通过函数pthread_exit来实现.另外须要说明的是,一个线程不能被多个线程等待,也就是说对一个线程仅仅能调用一次pthread_join.否则仅仅有一个能正确返回.其它的将返回ESRCH 错误. 在Linux中,默认情况下是在一个线程被创建后.必须使用此函数对创建的线程进行资源回收,可是能够设置Threads attributes来设置当一个线程结束时.直接回收此线程所占用的系统资源.具