来自 金沙澳门官网网址 2019-12-19 15:01 的文章
当前位置: 金沙澳门官网网址 > 金沙澳门官网网址 > 正文

关于for循环中调用,iOS多线程中的dispatch_semapho

我有这样一个需求:-(void)DoDataFromSeverBuf:(char*)cBuflen:(unsignedlong)ulDataLength{//省略主要是解析服务端数据}-(void)HandleServerData(){dispatch_queue_tqueue=dispatch_queue_create("cn.com.test",DISPATCH_QUEUE_SERIAL);while(true){unsignedcharszBuf[MAX_LENGTH]={};unsignedintnRecved=-1;unsignedlongulBufferLen=0;nRecved=GetDataFormServer(szBuf);//从服务端拿数据dispatch_async(queue,^{[selfDoDataFromSeverBuf:szBuflen:nRecved];});}}需要把每次从服务端读取的数据放到一个队列里去处理,但在实际跟踪调试的时候,发现szBuf的值为空,居然没取到值。但实际上从调用GetDataFormServer的跟踪调试的时候,szBuf是有值的,但为什么传给队列的block后,就没有值了呢?难道dispatch_async这样的函数,不能在for或while中调用????

在Windows平台下, 对线程的同步控制,可以有Critical Section,Mutex,Semaphore,Event 等方式.

在IOS平台,使用GCD进行简单的多线程编程时,可以使用dispatch_semaphore_t进行相应的同步操作.

IOS平台上没有对应的Event这个控制对像. 对于一些适合Event模式的情况下,可以通过dispatch_semaphore_t模 拟event(autoReset)的特性.

本文由金沙澳门官网网址发布于金沙澳门官网网址,转载请注明出处:关于for循环中调用,iOS多线程中的dispatch_semapho

关键词: