NSPort与NSRunloop的关系是流与消息调度的关系
NSPort与NSRunloop的关系是流与消息调度的关系。
NSPort 将流插入到消息调度队列;
相当于 Socket将流插入到应用一样
- (void)launchThread {
NSPort *myport = [NSMachPort port];
if(myport) {
//让本类持有即将到来的端口消息。
[myport setDelegate:self];
//将port添加到当前的runloop
[[NSRunLoop currentRunLoop] addPort:myport forMode:NSDefaultRunLoopMode];
//当前线程调起工作线程
[NSThread detachNewThreadSelector:@selector(LaunchThreadWithPort:) toTarget:[MyWorkerClass new] withObject:myport];
}
}
#pragma mark - port delegate
#define kCheckinMessage 1002233
- (void)handlePortMessage:(NSPortMessage *)message {
NSLog(@"接收到子线程额消息");
//消息的id
uint32_t messageID = message.msgid;
//获取远程端口,也就是工作线程的端口。线程通信需要两个端口??
/*
* 本地线程和远程线程可以使用相同的端口对象进行“单边通信”,(换句话说)一个线程创建的“本地端口对象”成为另一个线程的“远程端口对象”。
*
*/
NSPort *distanPort = nil;
if(messageID == kCheckinMessage) {
//获取工作线程关联的端口
distanPort = message.sendPort;
}
NSLog(@"工作线程的port===%@",distanPort);
}
- (void)LaunchThreadWithPort:(id)port {
//
[[NSThread currentThread] setName:@"HaoyuWorkerThread"];
//设置当前线程和主线程通信的端口
NSPort *distantPort = (NSPort *)port;
//初始化当前当前类的对象
//MyWorkerClass *work = [MyWorkerClass new];
//给主线程发送消息
[self sendMessageToOtherThread:distantPort];
//启动当前线程的runloop
[[NSRunLoop currentRunLoop] run];
}
//private method
- (void)sendMessageToOtherThread:(NSPort *)outPort {
self.remotePort = outPort;
//创建工作线程自己的端口并绑定工作线程
NSPort* myPort = [NSMachPort port];
[myPort setDelegate:self];
[[NSRunLoop currentRunLoop] addPort:myPort forMode:NSDefaultRunLoopMode];
//创建签到消息
NSPortMessage *messageObjc = [[NSPortMessage alloc] initWithSendPort:outPort receivePort:myPort components:@[@"aa",@"bb"]];
if(messageObjc) {
uint32_t kCheckinMessage = 1002233;
[messageObjc setMsgid:kCheckinMessage];
BOOL sendSuccess = [messageObjc sendBeforeDate:[NSDate date]];
if(sendSuccess) {
NSLog(@"发送成功");
}
}
}
#pragma mark - delegate
- (void)handlePortMessage:(NSPortMessage *)message {
NSLog(@"接收到父线程的消息");
}
NSPort与NSRunloop的关系是流与消息调度的关系的更多相关文章
- Entity Framework管理实体关系(一):管理一对一关系
我们现在已经知道如何使用Code First来定义简单的领域类,并且如何使用DbContext类来执行数据库操作.现在我们来看下数据库理论中的多样性关系,我们会使用Code First来实现下面的几种 ...
- HttpServletRequestWrapper 是HttpServletRequest的包装类 ·关系相当于 int 与integer的关系
HttpServletRequestWrapper 是HttpServletRequest的包装类 ·关系相当于 int 与integer的关系
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- Java中的流(4)InputStream,InputStreamReader,BufferedReader关系
InputStream是字节流,InputStreamReader将字节流转成字符流,BufferedReader将字符流转成字符缓冲,开始读字符. 1.InputStream.OutputStrea ...
- Syste.IO命名空间下的流操作类之间的关系
- CRM 2016 子表单中N:1关系 字段要求与新建时的关系
父表单在新建子表单项时弹出的窗口和 子表单的N:1关系是有关系的.说白了就是子表单窗体上的父表单字段是不是必填项. 关系如下: 1 非必填项 点击子表单的"+"号时,会出现look ...
- Zstack中任务,事件,消息之间的关系
Zstack是Zigbee协议的具体实现,在实现的过程中为了能够更好的对各个模块和功能进行管理,所以加入了OSAL(Operating System Abstraction Layer 操作系统抽象层 ...
- CLOUD配置审批流发消息
1.进入流程中心-工作流-流程设计中心 2.新增物料管理冻结流程 3.进入修改配置项 4.新消息节点 5.写入消息标题,内容等 6.填入接收人 7.保存后发布 8.进入流程配置中心 9.捆绑并启用 1 ...
随机推荐
- Robot Framework(四)创建测试套件
2.3.1测试用例文件 Robot Framework测试用例是使用测试用例文件中的测试用例表创建的.这样的文件会自动从它包含的所有测试用例中创建一个测试套件.可以有多少测试用例没有上限,但建议少于1 ...
- 发现被坑了,从来没看到说java的Date一旦实例化时间就不会变了
java中使用Date对象获取系统当前时间,然而我就没看到哪篇教程告诉我说Date创建对象之后其中的时间是不会变的!!! 一开始我写了类似于下边这样的代码,希望每隔一段时间显示一次时间 Date d= ...
- python实现定时发送消息
#!/usr/bin/env python#-*- coding:utf-8 -*- @Author : wujf @Time:2018/8/21 15:59# 自动发送消息from threadin ...
- [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper (状态压缩DP)
不打算把题目放着,给个空间传送门,读者们自己去看,传送门(点我) . 这题是自己做的第一道状态压缩的动态规划. 思路: 在这题中,我们设f[i]为i在二进制下表示的那些牛所用的最小电梯数. 设g ...
- React 手稿 - Component state
Component state 实例: import React, { PureComponent } from 'react'; export default class extends PureC ...
- 用于检测进程的shell脚本
用于检测进程的shell脚本 2010-07-07 10:38:08| 分类: Centos |字号 订阅 脚本一: #!/bin/sh program=XXXX #进程名 sn=`ps - ...
- android onContextItemSelected和onMenuItemSelected厉害关系
Android 的activity中onCreateOptionsMenu onMenuItemSelected onOptionsItemSelected onCreateContextMenu o ...
- NYIST 119 士兵杀敌(三)
士兵杀敌(三)时间限制:2000 ms | 内存限制:65535 KB难度:5 描述南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出 ...
- String 基本使用方法, 以及要注意的事项
package chengbaoDemo; public class Test01 { public static void main(String[] args) { //字符串的两种创建形式 St ...
- CF914A Perfect Squares
CF914A Perfect Squares 题意翻译 给定一组有n个整数的数组a1,a2,…,an.找出这组数中的最大非完全平方数. 完全平方数是指有这样的一个数x,存在整数y,使得x=y^2y2 ...