转换Windows 7 VS 2010的timespec

时间:2015-04-24 08:13:43

标签: c++ build time.h

我正在尝试为Windows 7构建OpenVDB查看器并碰到这行代码:

secs = fabs(secs);
int isecs = int(secs);
struct timespec sleepTime = { isecs /*sec*/, int(1.0e9 * (secs - isecs)) /*nsec*/ };
nanosleep(&sleepTime, /*remainingTime=*/NULL);

不幸的是,我不知道这段代码究竟是什么意思,因为我需要让VS2010编译器兼容才能构建它。 那么,我可以知道这个代码的等效物或者我可以用来编辑它的其他库吗?

1 个答案:

答案 0 :(得分:0)

假设secs是一个浮点值,给出线程在几秒钟内休眠的时间,例如

float secs = 0.8312f;

您可以使用以下命令替换Windows版本:

float secs = 0.8312f;
DWORD delay = static_cast<DWORD>(fabs(secs * 1000.0f));
Sleep(delay);

可能你可以为此添加一些检查(例如,如果secs不是负数......)。

为了保持主代码库的可移植性,您可以创建一个额外的模块来定义自己的便携式睡眠功能,可能带有签名void PortableSleep(float seconds);。然后,将一个.cpp文件放在Unix实现中,另一个放在win32实现中并相应地链接。

如果你想浪费时间来弄清楚std::this_thread::sleep_for()内容是如何工作的(VS缺少一个功能,这使得它有点难以使用),你还可以使用<chrono>。< / p>