美文网首页
使用nsport线程通信iOS线程通信和进程通信的例子(NSMa

使用nsport线程通信iOS线程通信和进程通信的例子(NSMa

作者: 小老虎都会 | 来源:发表于2018-08-29 16:14 被阅读0次

#define kMsg1 100#define kMsg2 101- (void)viewDidLoad {

    [super viewDidLoad];

    //1. 创建主线程的port    // 子线程通过此端口发送消息给主线程    NSPort *myPort = [NSMachPort port];

    //2. 设置port的代理回调对象    myPort.delegate = self;

    //3. 把port加入runloop,接收port消息    [[NSRunLoop currentRunLoop] addPort:myPort forMode:NSDefaultRunLoopMode];

    NSLog(@"---myport %@", myPort);

    //4. 启动次线程,并传入主线程的port    MyWorkerClass *work = [[MyWorkerClass alloc] init];

    [NSThread detachNewThreadSelector:@selector(launchThreadWithPort:)

                            toTarget:work

                          withObject:myPort];

}

- (void)handlePortMessage:(NSMessagePort*)message{

    NSLog(@"接到子线程传递的消息!%@",message);

    //1. 消息id    NSUInteger msgId = [[message valueForKeyPath:@"msgid"] integerValue];

    //2. 当前主线程的port    NSPort *localPort = [message valueForKeyPath:@"localPort"];

    //3. 接收到消息的port(来自其他线程)    NSPort *remotePort = [message valueForKeyPath:@"remotePort"];

    if (msgId == kMsg1)

    {

        //向子线的port发送消息        [remotePort sendBeforeDate:[NSDate date]

                            msgid:kMsg2

                        components:nil                              from:localPort

                          reserved:0];

    } else if (msgId == kMsg2){

        NSLog(@"操作2....\n");

    }

}

MyWorkerClass.h:

#import "MyWorkerClass.h"@interface MyWorkerClass() {

    NSPort *remotePort;

    NSPort *myPort;

}@end#define kMsg1 100#define kMsg2 101@implementation MyWorkerClass

- (void)launchThreadWithPort:(NSPort *)port {

    @autoreleasepool {

        //1. 保存主线程传入的port        remotePort = port;

        //2. 设置子线程名字        [[NSThread currentThread] setName:@"MyWorkerClassThread"];

        //3. 开启runloop        [[NSRunLoop currentRunLoop] run];

        //4. 创建自己port        myPort = [NSPort port];

        //5.        myPort.delegate = self;

        //6. 将自己的port添加到runloop        //作用1、防止runloop执行完毕之后推出        //作用2、接收主线程发送过来的port消息        [[NSRunLoop currentRunLoop] addPort:myPort forMode:NSDefaultRunLoopMode];

        //7. 完成向主线程port发送消息        [self sendPortMessage];

    }

}/**

*  完成向主线程发送port消息

*/- (void)sendPortMessage {

    NSMutableArray *array  =[[NSMutableArray alloc]initWithArray:@[@"1",@"2"]];

    //发送消息到主线程,操作1    [remotePort sendBeforeDate:[NSDate date]

                        msgid:kMsg1

                    components:array

                          from:myPort

                      reserved:0];

    //发送消息到主线程,操作2    //    [remotePort sendBeforeDate:[NSDate date]    //                        msgid:kMsg2    //                    components:nil    //                          from:myPort    //                      reserved:0];}

#pragma mark - NSPortDelegate/**

*  接收到主线程port消息

*/- (void)handlePortMessage:(NSPortMessage *)message

{

    NSLog(@"接收到父线程的消息...\n");

    //    unsigned int msgid = [message msgid];    //    NSPort* distantPort = nil;    //    //    if (msgid == kCheckinMessage)    //    {    //        distantPort = [message sendPort];    //    //    }    //    else if(msgid == kExitMessage)    //    {    //        CFRunLoopStop((__bridge CFRunLoopRef)[NSRunLoop currentRunLoop]);    //    }}@end

相关文章

  • 使用nsport线程通信iOS线程通信和进程通信的例子(NSMa

    #define kMsg1 100#define kMsg2 101- (void)viewDidLoad { ...

  • ios 多线程的故事4

    线程间通信 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个...

  • Android 面试常问知识

    Q1:线程间的通信进程间通信的几种方式进程间通信方式详解Q2:线程安全SharePreferences 是否线程安...

  • 《iOS高级开发之多线程编程之二》

    线程间的通信 在一个进程中,线程往往不是孤立存在的,多个线程之间经常进行通信,称为线程间通信。 NSThread ...

  • linux进程间通信(1)

    一、进程通信概述 1、什么是进程间通信?什么是线程间通信? 进程间通信: 进程间通信就指的是用户空间中进程A与进程...

  • iOS进程间通信

    线程间通信 :通过performSelector系列的方法 可以实现 各种线程间的通信(通信 :调用与传参)进程间...

  • python进线程——多进程间的通信

    1. 进程间与线程间通信区别 (1)线程间通信的类与锁在进程间是不适用的,必须使用multiprocessing中...

  • 多线程之iOS线程间通信

    什么叫做线程间通信在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传...

  • iOS开发多线程--线程通信

    线程之间的通信 简单说明线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信。 线程间通...

  • 线程通信以及多线程的不安全性

    线程通信 在一个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信线程通信的体现:1、一个线程需要传递数...

网友评论

      本文标题:使用nsport线程通信iOS线程通信和进程通信的例子(NSMa

      本文链接:https://www.haomeiwen.com/subject/jzlkwftx.html