zoukankan      html  css  js  c++  java
  • 多线程---线程间通讯

    举个例子:

    程序一启动,就会开启主线程,主线程是一条路往下走的。

    如果运行到一定程度,想做一些比较耗时的操作(下载网络图片),不能在主线程做,因为会阻塞主线程,导致主线程上的任务没法继续往下执行。

    这个时候,就要开启一条子线程,将耗时操作(下载网络图片)放到子线程去执行。

    两条线程各自都是一条路往下走,当子线程的耗时操作执行完毕后(网络图片下载完毕),这时候需要回到主线程刷新UI

    这里就牵扯到线程之间的通讯。

    实际上就是:从一条线程回到另一条线程 或者 从一条线程传递数据给另一条线程,这就是线程间通讯

    怎么通讯?

    1)方法一:  GCD的方法

    2)方法二:

    // 只能和主线程通讯

    1 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
    2 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

     

    // 可以和任何线程通讯

    1 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array
    2 - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; 

     

    3)方法三:NSMachPort  属于手动管理线程的范畴(了解即可)

    Mach是最先应用多线程技术的操作系统,所以多线程技术是基于Mach操作系统的。

    主线程和子线程是通过各自的 NSMachPort 端口来实现通讯。

  • 相关阅读:
    利用Lucene将被索引文件目录中的所有文件建立索引
    Carrot2 in action 初步印象
    Lucene建立索引搜索入门实例
    Lucene索引文件组成
    模拟浏览器登陆的基本思路与做法
    HttpWatch使用教程
    httpclient 怎么带上登录成功后返回的cookie值访问下一页面
    Google开源库-Volley的使用
    Android Material Design 学习笔记
    2015年山东省齐鲁软件大赛总结
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/4357009.html
Copyright © 2011-2022 走看看