cocoa – 如何退出[NSRunLoop runUntilDate]?

cocoa – 如何退出[NSRunLoop runUntilDate]?,第1张

概述我正在编写一个必须与通过USB连接的设备进行通信的应用程序.应用程序在固定时间从设备轮流发送和接收数据.所有Rx / Tx都发生在一个单独的线程中,否则UI将被阻止.基本结构看起来基本上是这样的. (自动释放池和省略的东西) -(void)comThread:(id)arg { while(state == kIsConnected) { // let timers run [ @H_403_2@ 我正在编写一个必须与通过USB连接的设备进行通信的应用程序.应用程序在固定时间从设备轮流发送和接收数据.所有Rx / Tx都发生在一个单独的线程中,否则UI将被阻止.基本结构看起来基本上是这样的. (自动释放池和省略的东西)

-(voID)comThread:(ID)arg {  while(state == kIsConnected) {    // let timers run    [runLoop runUntilDate:[NSDate distantFuture]];    // handle data    if(rxTxState == kRx) {      // do some stuff to pass data to upper layers      rxTxState = kTx;    }    if(rxTxState == kTx) {      // do some stuff to send data      rxTimeoutTimer = [NSTimer scheduledTimer....];    }  } }

在发送数据之后,应用程序等待接收数据或者触发rxTimeoutTimer,这导致数据包的重传. rx *** 作有效,因为底层使用异步系统调用并调用一个看起来基本像这样的rx处理程序.

-(voID)receiveData:(NSData*)data{  [rxQueue addobject:data];  [rxTimeoutTimer invalIDate];  // cancel timeout}

有没有(简单)方法使[runLoop runUntilDate:]退出receiveData:? Apple文档说删除所有计时器源并不能保证RunLoop退出.我读了一些关于调用performSelector的内容:onThread:…但它要么不起作用,要么我没有明白这一点.

谢谢.

解决方法
CFRunLoopStop([runLoop getCFRunLoop]);
@H_403_2@ 总结

以上是内存溢出为你收集整理的cocoa – 如何退出[NSRunLoop runUntilDate]?全部内容,希望文章能够帮你解决cocoa – 如何退出[NSRunLoop runUntilDate]?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存