您好我想暂停在可可项目中执行某个函数。我不想使用sleep()因为函数需要在用户交互后恢复。我也想避免多次调用睡眠。
感谢您的回复。好的,我在等待一些答案时启动了代码。然后我意识到睡眠或暂停对我没用,因为它解放了我的整个程序。我想我可能需要做一些线程。情况如下:
我有一个使用coreplot的程序。我也用它来调试和开发算法,所以我在处理数据时做了很多绘图(即在代码的中间但是我需要灵活地把它放到任何地方,所以我不能分开我的函数)。我能够使用NSRunAlertPanel执行此操作,但是有一个类似的消息框并不能使它非常明显。当警报打开时,我无法对主窗口做很多事情。
我希望我的解释不会太混乱,但如果我生病了,请尝试一行:
我想与我的cocoa接口进行交互,而我的一个函数在它正在进行的操作中停止。
答案 0 :(得分:3)
它听起来像你正在寻找-NSRunLoop runUntilDate:
Apple的文档:runUntilDate
此代码将导致方法中的执行暂停,但仍然会发生其他事件,如计时器和用户输入:
while ( functionShouldPause )
{
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
}
切换functionShouldPause返回false将允许该方法的其余部分执行。
答案 1 :(得分:2)
您似乎更感兴趣的是对用户事件做出反应而不是“暂停”该功能。您可能希望将要执行的代码放入由用户操作调用的另一个函数中。
答案 2 :(得分:1)
所以听起来你想把这个功能分成两部分;在睡眠之前发生的位以及之后发生的位。在进入睡眠状态之前,注册一个调用“之后”代码的通知,并且可以由UI触发(通过连接到任何UI元素的IBAction
)。现在,不是调用sleep()
,而是在您想要进入休眠状态的时间段内运行运行循环,然后在返回后发布“after”通知。在“after”代码中,删除对象作为该通知的观察者。现在,无论哪个先发生 - 时间用完或用户中断你 - 你可以运行“后”代码。
答案 3 :(得分:0)
在C语言中,您可以使用<unistd.h>
中的pause()
功能。这会导致调用程序暂停直到收到信号,此时pause
调用将返回,程序将继续(或调用信号处理程序;取决于收到的信号)。
答案 4 :(得分:0)
没有时钟或定时器功能吗?按下按钮时,开始运行一个类似timeTillAction = 10的循环,并执行timeTillAction = timeTillAction - 1的循环,直到达到0,然后在10秒后运行任何代码。
对不起,如果没有得到很好的解释。