如何在mac上暂停c或objective-c中的函数而不使用sleep()

时间:2009-08-03 21:45:47

标签: objective-c cocoa macos

您好我想暂停在可可项目中执行某个函数。我不想使用sleep()因为函数需要在用户交互后恢复。我也想避免多次调用睡眠。

感谢您的回复。好的,我在等待一些答案时启动了代码。然后我意识到睡眠或暂停对我没用,因为它解放了我的整个程序。我想我可能需要做一些线程。情况如下:

我有一个使用coreplot的程序。我也用它来调试和开发算法,所以我在处理数据时做了很多绘图(即在代码的中间但是我需要灵活地把它放到任何地方,所以我不能分开我的函数)。我能够使用NSRunAlertPanel执行此操作,但是有一个类似的消息框并不能使它非常明显。当警报打开时,我无法对主窗口做很多事情。

我希望我的解释不会太混乱,但如果我生病了,请尝试一行:

我想与我的cocoa接口进行交互,而我的一个函数在它正在进行的操作中停止。

5 个答案:

答案 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秒后运行任何代码。

对不起,如果没有得到很好的解释。