2015-04-24 30 views
0

我想建立OpenVDB觀衆對Windows 7和撞到這行代碼:轉換的timespec爲Windows 7 VS 2010

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

不幸的是,我不知道究竟是該代碼的含義我需要使VS2010編譯器兼容才能構建它。 那麼,我可以知道這個代碼或其他庫的等價物,我可以用它來輕鬆編輯它嗎?

+0

如果你能以10毫秒的精度以毫秒級分辨率生活,只需使用Win32函數''Sleep(mysleeptimeinmilliseconds)''來替換所有的unix亂碼;) – BitTickler

+0

@ user2225104,我已經搜索了可以代替它的類似函數,但問題是我沒有真正理解代碼,不太擅長這種事情,謝謝btw。 – vincent911001

+0

您發佈的代碼的目的是暫停當前線程的執行一段時間。 – BitTickler

回答

0

假設secs是一個浮點值,給出線程應該以秒爲單位睡眠的時間,例如,

float secs = 0.8312f; 

您可以替換爲Windows版本:

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

也許你可以進行一些檢查添加到這個(例如,如果秒不爲負...)。

爲了保持主代碼的便攜性,您可以創建一個額外的模塊,您可以在其中定義自己的便攜式睡眠功能,可能是簽名void PortableSleep(float seconds);。然後,在一個.cpp文件中放置Unix實現,在另一個win32實現中並相應地鏈接。

如果您想花時間計算<chrono>工具的工作原理(VS缺少一個功能,這使得它更難使用),您還可以使用std::this_thread::sleep_for()

+0

非常感謝。稍後再嘗試。感謝你的幫助,歡呼聲。 – vincent911001

相關問題