Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于iOS中的事件启动多个任务_Ios_Parallel Processing_Bluetooth_Queue - Fatal编程技术网

基于iOS中的事件启动多个任务

基于iOS中的事件启动多个任务,ios,parallel-processing,bluetooth,queue,Ios,Parallel Processing,Bluetooth,Queue,我正在使用EADemo示例开发一个蓝牙应用程序。每当bluetooth inputStream中有数据时,就会调用以下事件: - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { switch (eventCode) { case 1: //here I want to start two tasks break; } 我有一个公共队列,我必须并行地写

我正在使用EADemo示例开发一个蓝牙应用程序。每当bluetooth inputStream中有数据时,就会调用以下事件:

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
    switch (eventCode) {
      case 1:
       //here I want to start two tasks
       break;

}
我有一个公共队列,我必须并行地写入和读取。 这个队列实际上是一个相互交错的队列。在编写部分,我使用addobject: 在阅读部分,我使用了objectAtIndex:0


任何人都知道如何解决这个问题吗?

因为您使用的是同一个阵列,所以需要确保安全访问,否则可能会导致应用程序崩溃

方法A:(使用中央大调度)

//阅读

//写

//在同一队列上执行操作时,可以安全地访问阵列

方法B:(使用线程)

创建两个线程

  • 读线程

  • 书写步态


  • 但要以同步方式访问阵列。

    在A中:调度和异步同步是否同时启动?起初我也这么想。但我不确定,因为它是dispatch\u async,所以它将立即转到下一行,而不等待执行。所以第一个块将被提交,然后第二个块将被提交。它们如何执行取决于GCD如何为它们提供cpu周期。谢谢你的想法。我稍后再试试这个。目前,我可以访问这两个操作的队列。当我访问不同的对象时,目前没有问题。:)
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);//set priority as per requirement
    
    dispatch_async(queue, ^{
    
                        while (//condition to stop)
                        {
                            //Perform read operation            
                        }
                    });
    
    dispatch_async(queue, ^{
    
                        while (//condition to stop)
                        {
                            //Perform write operation           
                        }
                    });