Windows的API函數 Sleep(INFINITE); 休眠時間為永久
Linux的API函數sleep 沒有直接表示無限時間的參數,根據POSIX標準,sleep() 函數的參數應該是 unsigned int 類型,因此最大可以接受的參數值是 UINT_MAX,即 4294967295 秒。sleep(UINT_MAX); 休眠42億多秒,換算后大約是 49710 天,相當于大約 136 年。
#include <iostream>
#include <limits.h>
#include <unistd.h>int main() {std::cout << UINT_MAX << std::endl;sleep(UINT_MAX);return 0;
}
C++可以用條件變量 std::condition_variable 實現類似的效果。
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>std::mutex mtx;
std::condition_variable cv;int main() {std::cout << "Main thread starts..." << std::endl;std::mutex mtx;std::unique_lock<std::mutex> lock(mtx);cv.wait(lock); // 主線程永久等待條件變量std::cout << "Main thread ends..." << std::endl;return 0;
}
在這個示例中,主線程在調用 cv.wait(lock); 之后會永久等待,直到其他線程通過 cv.notify_one() 或 cv.notify_all() 喚醒它。所以只要不喚醒它,就等同于windows的Sleep(INFINITE)