c++ - 限制函数执行时间

标签 c++ macos xcode6

有什么方法可以让一个函数在特定时间内执行它的代码,然后暂停它的执行并继续执行另一个函数。我希望能够制作一个可以执行多任务的程序。我已经尝试使用 <thread> ,但每当我尝试运行该程序时,它都会部分运行其中一个线程,然后调试器会抛出“信号 SIGABRT”并停止。还有其他方法吗?

编辑:

这是我尝试使用线程的代码。我将此作为测试,以尝试让两个功能同时运行,然后添加计时器以暂停执行。我希望它能够在一个线程上运行一小段时间,然后转到另一个线程,并继续这样做。

#include <iostream>
#include <thread>

using namespace std;

void task1()
{
    for (int i=0; i<100; i++)
    {
        cout << i << '\n';
    }
}

void task2()
{
    for (int i=0; i<100; i++)
    {
        cout << i << '\n';
    }
}

int main()
{
    thread t1(task1);
    thread t2(task2);

    return 0;
}

最佳答案

在没有多线程的情况下,最常用的方法是滥用大多数 GUI 框架使用的消息循环。一些工作在 for 循环中完成,然后是 PumpMessages 或任何调用以通过处理排队的消息来保持 GUI 响应的内容,然后完成更多工作。

在我看来,这是一种不好的做法。它实际导致的是不一致、缓慢和无响应的应用程序。

另一个选项是可恢复函数,例如 C# 和 proposed for C++17 中可用的函数.然而,这些目前还不可用。

正确使用多线程很难,因为您已经发现崩溃和同步错误很常见,而且只能在运行时发现。然而,多核 CPU 现在无处不在,您无法真正避免多线程,因此最好学习如何正确使用它。

关于c++ - 限制函数执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800692/

相关文章:

c++ - 模板常量/非常量参数转换

cocoa - 如何在 Mac 上禁用屏幕保护程序/显示器 sleep

swift - slider 控制 NSScroller

macos - cordova:从 Jenkins 找不到命令

xcode6 - Xcode 6 自适应 UI 如何向后兼容 iOS 7 和 iOS 6?

c++ - 将句子拆分为包含撇号的单词

c++ - 在 Qt 信号/槽的上下文中使用观察者模式

c++ - C++ 结构的 "acceptable"有多少功能?

ios - Xcode 中的“找不到框架”

ios - UITableView自定义Cell