使用<thread>(C ++)</thread>创建delay()函数

时间:2014-06-06 04:42:05

标签: c++ time

我正在尝试使用“delay(int x)”外形在C ++中创建延迟函数。这是我目前正在运行的程序:

#include <chrono>
#include <thread>
#include <iostream>
using namespace std;

typedef chrono::duration<int, ratio<1,1000> > ms; //defines a ms

void f(int x){
    ms xmillisecs (x);  // defines the duration xmillisecs (which is x milliseconds)
    this_thread::sleep_for(xmilisecs);  // delays for x milliseconds
}

void delay(int delaytime){
    thread mythread(f,delay time);  // starts the above thread (the one with x ms delay)
}

int main(){
    cout<<"I hope this works";
    delay(1000);
    cout<<"This happens one second later";
    cin.get();
    return 0;
}

这编译没有错误消息,但终端提供以下输出,这显然不是delay()函数应该做的:

libc++abi.dylib: terminating
I hope this worksAbort trap: 6

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

std::thread::sleep_for()函数仅导致指定的线程休眠。

在您的情况下,您正在创建一个休眠的第二个线程,但运行main()的线程继续执行。

看起来应该更像:

void delay(int delaytime)
{
    ms xmillisecs (delaytime);  
    this_thread::sleep_for(xmillisecs); 
}