gpt4 book ai didi

cocoa - 如何退出 [NSRunLoop runUntilDate]?

转载 作者:行者123 更新时间:2023-12-03 16:16:04 27 4
gpt4 key购买 nike

我正在编写一个应用程序,它必须与通过 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]);

关于cocoa - 如何退出 [NSRunLoop runUntilDate]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com