簡體   English   中英

C ++函數在windows中完美運行但不是Linux嗎?

[英]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.

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