C++ Windows 7与2010的timespec转换

C++ Windows 7与2010的timespec转换,c++,build,time.h,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编译

我试图为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编译器兼容才能构建它。
那么,我可以知道这个代码或其他库的等价物是什么吗?我可以使用它轻松编辑它吗?

假设
secs
是一个浮点值,给出线程睡眠的时间(以秒为单位),例如

float secs = 0.8312f;
对于windows版本,您可以将其替换为:

float secs = 0.8312f;
DWORD delay = static_cast<DWORD>(fabs(secs * 1000.0f));
Sleep(delay);
float secs=0.8312f;
DWORD延迟=静态_-cast(晶圆厂(秒*1000.0f));
睡眠(延迟);
可能您可以为此添加一些检查(例如,如果secs不是负值…)

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


你也可以使用
std::this_thread::sleep_for()
如果你想浪费时间弄清楚
东西是如何工作的(VS缺少一个功能,这会使它更难使用)。

如果你可以以毫秒的分辨率生活在~10ms的精度下,只需使用Win32函数“sleep(mysleeptimeinmillseconds)”“”来替换所有的unix胡言乱语;)@user2225104,我已经搜索了类似的函数来替换它,但问题是我没有真正理解代码,不太擅长这类事情,顺便说一句。你发布的代码的目的是暂停当前线程的执行一段时间。@user2225104,好的,现在试着通读timespec的例子,你能推荐vs2010中包含的最合适的库吗?也许我会尝试翻译它。非常感谢你。我稍后再试试。谢谢你的帮助,干杯。