2011-10-30 30 views
8

Tôi muốn thực hiện thao tác được đề cập ở trên trong mili giây làm đơn vị. Tôi nên chọn thư viện và chức năng nào?Hoạt động ngủ trong C++, nền tảng: windows

Ty.

+0

Chức năng [Ngủ] (http://msdn.microsoft.com/en-us/library/ms686298%28VS.85%29.aspx)? – Praetorian

+0

Bạn có chắc là giấc ngủ là giải pháp tốt nhất? Nó thường không phải là. –

+0

Nếu bạn cần ngủ trong vài phần nghìn giây, lưu ý rằng sleep() có thể có độ phân giải 10ms trở lên –

Trả lời

5

Bạn có thể sử dụng chức năng Sleep từ Win32 API.

+0

LOL. Cùng một liên kết google đầu tiên nhưng bạn đánh bại tôi với nó bằng 45 giây. – ksming

2

trình lên lịch công việc của cửa sổ có độ chi tiết cao hơn 1ms (thường là 20ms). bạn có thể kiểm tra điều này bằng cách sử dụng bộ đếm hiệu suất để đo thời gian thực sự được sử dụng trong hàm Sleep(). (sử dụng QueryPerformanceFrequency()QueryPerformanceCounter() cho phép bạn đo thời gian xuống đến nano giây). lưu ý rằng Sleep(0) làm cho chủ đề ngủ trong thời gian ngắn nhất có thể. Tuy nhiên,

tuy nhiên, bạn có thể thay đổi hành vi này bằng cách sử dụng timeBeginPeriod() và chuyển khoảng thời gian 1ms. bây giờ Sleep(0) sẽ trở lại nhanh hơn nhiều.

lưu ý rằng cuộc gọi chức năng này được thực hiện để phát các luồng đa phương tiện với độ chính xác cao hơn. tôi chưa bao giờ gặp vấn đề gì khi sử dụng nó, nhưng nhu cầu trong một khoảng thời gian nhanh như vậy là khá hiếm. tùy thuộc vào những gì bạn đang cố gắng để đạt được, có thể có những cách tốt hơn để có được độ chính xác mà bạn muốn, mà không cần đến "hack" này.

6

Hoặc nếu bạn đang sử dụng Visual Studio 2010 (hay cách khác C++ 0x trình biên dịch biết) sử dụng

#include <thread> 
#include <chrono> 

std::this_thread::sleep(); 

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

Với trình biên dịch cũ hơn, bạn có thể có sự tiện lợi cùng sử dụng có liên quan Boost Libraries

Không cần phải nói lợi ích chính ở đây là tính di động và dễ dàng chuyển đổi độ trễ pa tham số cho các đơn vị 'con người'.

+2

Điều này sẽ không hoạt động trong năm 2010. VS 2012, có, nhưng không phải là năm 2010. – OldPeculier

+2

@OldPeculier Chỉ có nghĩa là đây là câu trả lời thường áp dụng, năm xuống đường :) – sehe

Các vấn đề liên quan