繁体   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