objective-c - GCDAsyncsocket 放到子线程总会不不执行,这是怎么回事
过去多啦不再A梦
过去多啦不再A梦 2017-05-02 09:34:17
0
2
593

GCDAsyncsocket 使用异步串行子线程中for循环执行一半就不执行了,代码如下,过程是点击发送按钮返回到主页面,然后异步执行下面的代码上传图片;

    
    - (void)sendAction{
      dispatch_queue_t queue = dispatch_queue_create("uploadImage", DISPATCH_QUEUE_SERIAL);
         dispatch_async(queue, ^{
       for (int i =0; i < 10; i++) {
              
         NSLog(@"async ------------ %@", [NSThread currentThread]);
        
        //第一张图的资源
        PHAsset *asset = self.sendImageArray[i];
        NSString *fileType;
        NSString *fileName;
      
        if (asset.mediaType == PHAssetMediaTypeImage) {
            fileType = @"jpg";
            NSData *data = [NSData dataWithContentsOfFile:filePath[i]];

            [self upLoadImageData:data type:@"jpg" name:fileName];
        } else if(asset.mediaType == PHAssetMediaTypeVideo) {
            fileType = @"mp4";
              NSData *data = [NSData dataWithContentsOfFile:filePath[i]];
            [self uploadMp4Data:data type:fileType name:fileName];
            
        }       
  }
  });
  }
  
  - (void)upLoadImageData:(NSData*)data  type:(NSString *)fileType name:(NSString *)fileName{
     dataNameMutStr = [NSMutableString stringWithFormat:@"ios_%@_%@.jpg\n", @"图片",fileName];
   NSData *dataName = [dataNameMutStr dataUsingEncoding:NSUTF8StringEncoding];
   [self sendSocket:dataName data:data];
   }
   
   
   - (void)sendSocket:(NSData *)dataName data:(NSData *)datas{
     [self createClientTcpSocket];//发图片
     [_asyncsocket writeData:datas withTimeout:-1 tag:0];

   }
过去多啦不再A梦
过去多啦不再A梦

全部回复(2)
漂亮男人

信息不大全,不好判断,原因,不过像这种情况,应该把for循环放到里面
还有,资源访问的时候都应该加个锁

dispatch_async(queue, ^{
    for (int i =0; i < 10; i++) {
        // upload ....
    }
})
大家讲道理

代码和日志不完整,看不出什么原因。猜测原因两个:

  1. 其实还咋执行,但是调试的问题你抓不到状态了

  2. 真的被中断了,具体原因要深究,不过建议你把queue做一个引用,长期持有,不作为局部变量,如果局部变量那么做一个串行队列的意义在哪里?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!