C ++函数在windows中完美运行但不是Linux吗?

时间:2015-01-19 10:39:31

标签: c++ 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()函数可以正常工作。任何人都可以弄明白我的代码有什么问题吗?

4 个答案:

答案 0 :(得分:9)

我不知道为什么每个人都在围绕你的问题跳舞而不是回答它。

你正在尝试实现你自己的类似睡眠的函数和你的实现,虽然它忙于等待而不是在内核空间中休眠(意味着处理器将“主动”运行代码来睡眠你的程序,而不是告诉机器你的程序正在睡觉,它应该运行其他代码),就好了。

问题是clock()不需要返回毫秒。 clock()将返回从纪元开始经过的系统时间/处理时间。该时间占用的单位取决于实施情况。

例如,在我的机器上,这就是手册页所说的内容:

  

说明

     

clock()函数确定自此以后使用的处理器时间量   调用调用进程,在一个的CLOCKS_PER_SECs中测量   第二

     

返回值

     

clock()函数返回除非出现错误所用的时间量   发生,在这种情况下返回值为-1。

     

另见

     

getrusage(2),clocks(7)

     

标准

     

clock()函数符合ISO / IEC 9899:1990(``ISO C90'')和   单一UNIX规范的版本3(“SUSv3”)需要   CLOCKS_PER_SEC定义为一百万

从粗体部分可以看出,刻度是百万分之一秒,即微秒(不是毫秒)。要“睡眠”3秒钟,您需要拨打sleep(3000000)而不是sleep(3000)

答案 1 :(得分:2)

使用C ++ 11,您可以使用sleep_for

#include <chrono>
#include <thread>

void sleep(unsigned int mseconds) {
    std::chrono::milliseconds dura( mseconds);
    std::this_thread::sleep_for( dura );
}

答案 2 :(得分:1)

你可以使用内置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

答案 3 :(得分:0)

Linux上没有标准的C API(毫秒),因此您必须使用usleep。 POSIX sleep需要几秒钟。