簡體   English   中英

C ++線程休眠而不凍結當前線程

[英]c++ thread sleep without freezing current thread

我正在編寫一個應用程序,我需要在不停止當前線程執行的情況下休眠新線程。

來自應用程序的一些代碼:

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
    }
}

所以我想運行makescreens()而不停止當前執行的應用程序。 我的輸出應該是這樣的:

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

如何解決? 還有其他方法可以代替睡眠嗎? 我是C ++的菜鳥。

不要調用photos.join();

這將使您的主線程等待,直到照片線程結束。

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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM