2011-10-30 58 views
8

我想以毫秒爲單位執行上面提到的操作。我應該選擇哪種庫和函數調用?在C++平臺下進行睡眠操作:windows

Ty。

+0

[Sleep](http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx)函數? – Praetorian

+0

你確定睡眠是最好的解決方案嗎?它通常不是。 –

+0

如果你需要睡幾毫秒注意sleep()可能有10ms或更多的分辨率 –

回答

5

您可以使用Win32 API中的Sleep函數。

+0

LOL。同樣的第一個谷歌鏈接,但你擊敗了我45秒。 – ksming

2

windows任務計劃程序的粒度遠高於1ms(通常爲20ms)。您可以使用性能計數器來測試這個功能,以測量真正在Sleep()函數中花費的時間。 (使用QueryPerformanceFrequency()QueryPerformanceCounter()可以測量下至納秒的時間)。請注意0​​會使線程在儘可能短的時間內處於睡眠狀態。

但是,您可以通過使用timeBeginPeriod()並傳遞1ms週期來更改此行爲。現在Sleep(0)應該返回更快。

請注意,此功能調用是爲了以更高的準確度播放多媒體流。我從來沒有使用過這個問題,但是這樣一個快速時期的需求是非常罕見的。取決於你試圖達到的目標,可能有更好的方法來獲得你想要的準確性,而不是訴諸於這種「黑客」。

6

或者,如果你正在使用Visual Studio 2010(或其他的C++ 0x瞭解編譯器)使用

#include <thread> 
#include <chrono> 

std::this_thread::sleep(); 

// or 
std::this_thread::sleep_for(std::chrono::milliseconds(10)); 

隨着舊的編譯器,你可以有使用相關Boost Libraries

一樣方便

不用說這裏的主要好處是便攜性和易於轉換的延遲pa拉米特到'人類'單位。

+2

這不會在2010年。VS 2012,是的,但不是2010年。 – OldPeculier

+2

@OldPeculier這只是意味着,這是現在的普遍適用的答案,多年來的道路:) – sehe