[英]C++ function runs in windows perfectly but not linux?
我正在嘗試編寫一個簡單的c ++函數sleep(int millisecond)
,它將使程序睡眠用戶特定的毫秒。
這是我的代碼:
#include <iostream>
#include <time.h>
using namespace std;
void sleep(unsigned int mseconds) {
clock_t goal = mseconds + clock();
while (goal > clock());
}
int main() {
cout << "Hello World !" << endl;
sleep(3000);
cout << "Hello World 2" << endl;
}
當我在Windows上運行此代碼但在Linux上無法運行時, sleep()
函數可以正常工作。 任何人都能弄明白我的代碼有什么問題嗎?
我不知道為什么每個人都在圍繞你的問題跳舞而不是回答它。
您正在嘗試實現自己的類似睡眠的功能和實現,同時它忙於等待而不是在內核空間中休眠(這意味着處理器將“主動”運行代碼來睡眠您的程序,而不是告訴機器您的程序正在睡覺,它應該運行其他代碼),就好了。
問題是clock()
不需要返回毫秒。 clock()
將返回從紀元開始經過的系統時間/處理時間。 該時間占用的單位取決於實施情況。
例如,在我的機器上,這是手冊頁所說的內容:
描述
clock()函數確定自調用調用進程以來使用的處理器時間量,以一秒鍾的CLOCKS_PER_SEC為單位進行測量。
返回值
clock()函數返回使用的時間量,除非發生錯誤,在這種情況下返回值為-1。
也可以看看
getrusage(2),時鍾(7)
標准
clock()函數符合ISO / IEC 9899:1990(``ISO C90'')和單UNIX規范的版本3(``SUSv3'') ,它要求將CLOCKS_PER_SEC定義為一百萬 。
從粗體部分可以看出,刻度是百萬分之一秒,即微秒(不是毫秒)。 要“睡眠”3秒鍾,你需要打電話給你的sleep(3000000)
而不是sleep(3000)
。
使用C ++ 11,您可以使用sleep_for
。
#include <chrono>
#include <thread>
void sleep(unsigned int mseconds) {
std::chrono::milliseconds dura( mseconds);
std::this_thread::sleep_for( dura );
}
你可以使用內置的sleep()
函數,該函數以秒為單位,而不是毫秒,並且必須包含unistd.h
標准庫,因為內置的sleep()
函數是在這個庫下定義的。
試試吧:
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
cout << "Hello World !" << endl;
sleep(3); //wait for 3 seconds
cout << "Hello World 2" << endl;
}
:P
Linux上沒有標准的C API(毫秒),所以你必須使用usleep
。 POSIX sleep
需要幾秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.