我正在尝试为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编译器兼容才能构建它。 那么,我可以知道这个代码的等效物或者我可以用来编辑它的其他库吗?
答案 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>