c ++线程睡眠没有冻结当前线程

时间:2013-09-02 15:47:13

标签: c++ multithreading asynchronous sleep

我编写了一个应用程序,我需要在不停止执行当前程序的情况下睡眠新线程。

应用程序中的一些代码:

PlaySound(L"sounds\\started.wav", NULL, SND_FILENAME);
thread photos(makeScreens);
photos.join();
CONSOLE_Print("Some testing string");

应该异步工作的函数:

void makeScreens(){
    CONSOLE_Print("Make Screens entered");
    srand (time(NULL));
    CONSOLE_Print("Sleeping 30s");
    Sleep(30000);
    CONSOLE_Print("Wake up");
    long int delay;
    for(int i=0; i<5; i++){ //loop for max screens=5
        delay=rand() % 600000 + 60000; //random a delay beetween sreens from 1 to 10 minutes
        CONSOLE_Print("Sleeping "+delay/1000);
        Sleep(delay); //sleep 
        CONSOLE_Print("Wake up and make screen");
        gdiscreen(i); //take a screen
    }
}

所以我想在不停止当前执行app的情况下运行makescreens()。我的输出应该是这样的:

Some testing string
Make Screens entered
Sleeping 30s
Wake up
Sleeping xxxx
Wake up and make screen

如何解决?有没有其他方式而不是使用睡眠?我是c ++的nawbie。

2 个答案:

答案 0 :(得分:0)

请勿致电photos.join();

这将使你的主线程等到照片线程结束。

答案 1 :(得分:0)

join意味着主线程(启动新线程)在继续之前等待启动的线程完成。因此,下面的订购应符合您的打印订单要求。

PlaySound(L"sounds\\started.wav", NULL, SND_FILENAME);
CONSOLE_Print("Some testing string");
thread photos(makeScreens);
photos.join();
CONSOLE_Print("new thread has now finished running");