gpt4 book ai didi

C++ 函数在 windows 中完美运行但在 linux 中不完美?

转载 作者:IT王子 更新时间:2023-10-29 00:50:49 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 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 上运行这段代码时,sleep() 函数可以完美运行,但在 Linux 上无法运行。任何人都可以找出我的代码有什么问题吗?

最佳答案

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

您正在尝试实现您自己的类 sleep 函数和您的实现,而它确实忙于等待而不是在内核空间中休眠(这意味着处理器将“主动”运行代码以使您的程序休眠,而不是告诉machine your program is sleeping and it should run other code), 就好了。

问题是 clock() 不需要返回毫秒数。 clock() 将返回系统时间/从纪元开始经过的以滴答为单位的进程时间。该时间需要多少单位取决于实现情况。

例如,在我的机器上,手册页是这样说的:

DESCRIPTION

The clock() function determines the amount of processor time used since the invocation of the calling process, measured in CLOCKS_PER_SECs of a second.

RETURN VALUES

The clock() function returns the amount of time used unless an error occurs, in which case the return value is -1.

SEE ALSO

getrusage(2), clocks(7)

STANDARDS

The clock() function conforms to ISO/IEC 9899:1990 (``ISO C90'') and Version 3 of the Single UNIX Specification (``SUSv3'') which requires CLOCKS_PER_SEC to be defined as one million.

从粗体部分可以看出,滴答是百万分之一秒,也就是微秒(不是毫秒)。要“休眠”3 秒,您需要调用 sleep(3000000) 而不是 sleep(3000)

关于C++ 函数在 windows 中完美运行但在 linux 中不完美?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com