我开始了解 NS/Objective-C 并发模型。假设我有一个命令行工具可以执行以下操作:
#include "myLibrary.h"
void callback(void* parameter){
cout<<"callback called.\n";
//some logic...
}
int main(int argc, char* argv[]){
myLibraryInit(callback);
std::string s;
while(true){
cin>>s;
myLibrarysResponseTo(s);
}
}
在我的图书馆里,我希望能够有两个回应。一个启动重复计时器,一个停止它。计时器应调用 myLibraryInit 提供给库的回调。
我以前在 iPhone/iPad 应用程序中使用过 NSTimers,我认为问题源于不同的范例命令行工具。主线程进入 main 并且在程序完成之前永远不会完成它。这意味着运行主运行循环不是免费的,这就是定时器运行的原因。我认为。那么如何让 NSTimer 在这种情况下工作呢?
另一件事是 Apple NSTimer 文档说我需要在安装它的同一线程上使 NSTimer 无效。当我安装计时器时,我不知道如何弄清楚我在哪个线程上,然后跟踪它(并确保它保持活动状态),直到我想使计时器无效。我不确定我是否只是缺少线程和调度队列、运行循环或其他东西之间的明显映射。我正在使用核心蓝牙,并像这样初始化一个中央管理器:
_centralManager=[[CBCentralManager alloc]
initWithDelegate: self
queue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
];
所以可能会从这里触发回调。如果回调包含一些逻辑来调用停止计时器的库函数,我无法保证来自哪个线程的无效。那么如何正确地使计时器无效呢?
我发现了这个问题,但它不允许 main 与计时器打开的运行循环同时发生。
我希望我提供了足够的背景信息。提前感谢您的回复。