Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 调度源类型计时器未启动_Iphone_Grand Central Dispatch - Fatal编程技术网

Iphone 调度源类型计时器未启动

Iphone 调度源类型计时器未启动,iphone,grand-central-dispatch,Iphone,Grand Central Dispatch,我正在全局队列上创建一个计时器,配置为从创建时间开始启动45秒,但由于某些原因,它似乎根本没有启动。现在将其更改为fire也没有任何作用 rest应用程序有很多事情要做,所以可能有什么东西阻止计时器启动 以下是计时器的创建方式: dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); timer = dispatch_source_create(DIS

我正在全局队列上创建一个计时器,配置为从创建时间开始启动45秒,但由于某些原因,它似乎根本没有启动。现在将其更改为fire也没有任何作用

rest应用程序有很多事情要做,所以可能有什么东西阻止计时器启动

以下是计时器的创建方式:

dispatch_queue_t globalQueue = 
        dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); 

timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, globalQueue); 
if (timer) {

// start 45 seconds for now
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 45ull * NSEC_PER_SEC);
uint64_t interval = 15ull * NSEC_PER_SEC; // every 15 seconds, converted to nanosecs

// leeway:8 microseconds
dispatch_source_set_timer(timer, startTime, interval, 8000ull); 

dispatch_source_set_event_handler(timer, block); // block is passed in

dispatch_resume(timer);
1) 试着调试/弄清楚它为什么不启动的好方法是什么?如果没有,

2) 是否有一种方法可以列出计划在特定时间点在队列上运行的所有给定任务


应用程序完成的一些工作无法在模拟器上启动,因此我需要在测试设备本身上进行调试。

您的常量需要是无符号的长-长,而不是无符号的长-长。更改为:

dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, 45ull * NSEC_PER_SEC);
uint64_t interval = 15ull * NSEC_PER_SEC; // every 15 seconds, converted to nanosecs

我也有类似的问题。我的猜测是,你的计时器是局部变量,并且在你设置好之后就被释放了。您可以将其设置为类属性。

看一看。

只是好奇,如果您将优先级更改为DISPATCH\u QUEUE\u priority\u NORMAL,它会触发吗?另外,我假设您正在检查块是否不为空,对吗?正确-块不为空,计时器启动的唯一时间是配置了DISPATCH\u QUEUE\u PRIORITY\u HIGH(调度队列优先级高)时,我无法让它运行。因此,我试图找出是否有一个工具可以帮助找出低优先级队列中被阻止的内容,或者我是否必须跟踪所有代码。是否有限制可以配置多少项以低优先级运行?没有特别的硬限制,这取决于您当前的系统负载等。但是,如果您做了一些阻止的事情,像阻塞读取之类的,你会很快用完工作线程。首先,低级别的终端运行sc_用法,用于查看系统调用中是否有线程阻塞等。您还可以使用Dispatch instrument,它在这方面非常有效。它不会显示在iPhone或模拟器模板下,但工作正常。只需从MacOSX中选择它,然后在模拟器中瞄准你的应用程序(显然你必须先通过xcode运行/安装它),然后点击记录。它将在模拟器中启动你的应用程序,效果非常好。