gpt4 book ai didi

objective-c - 命令行工具中的 NSTimer

转载 作者:行者123 更新时间:2023-12-01 19:37:00 25 4
gpt4 key购买 nike

我开始了解并发的 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)
];

因此可以从这里触发回调。如果回调包含一些逻辑来调用停止计时器的库函数,我无法保证无效来自哪个线程。那么我该如何正确地使计时器失效呢?

我找到了 this问题,但它不允许 main 与定时器开启的运行循环同时发生。

我希望我提供了足够的上下文。预先感谢您的回复。

最佳答案

如果任何系统框架[使用 GCD 或异步操作]要正常工作,您必须调用 dispatch_main() 或在主线程中运行 NSRunLoop

这可以像在 main() 函数末尾调用 [[NSRunLoop currentRunLoop] run]; 一样简单(只需确保安排启动工作首先,因为该方法永远不会返回)。

关于objective-c - 命令行工具中的 NSTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055913/

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