2012-04-11 148 views
4

我在unistd.h中找到了usleep函數,我認爲在每個動作之前等待一段時間是有用的。但是我發現線程只是在睡眠狀態,如果它沒有收到任何信號。例如,如果我按下一個按鈕(我正在使用OpenGL,但問題是關於time.h和unistd.h的更具體的),線程會被喚醒,而我沒有得到我想要的。 在time.h中有睡眠函數接受一個整數,但整數太多(我想等待0.3秒),所以我使用usleep。 我問是否有一個函數需要毫秒的時間(從任何GNU或任何庫)。 它應該像time()一樣工作,但返回毫秒而不是秒。是否可能?花費時間以毫秒爲單位

+0

你能清楚哪些是你不喜歡'usleep'更清楚了嗎?盡我所能地告訴它它確實是你想要的(當然,除了是μs而不是ms)。 – 2012-04-11 15:52:32

+0

我不明白這個問題。不是'microtime'你在找什麼? – nothrow 2012-04-11 15:52:41

+0

問題是我不想要一個睡眠函數,而是一個「getTime in ms」函數。因爲如果線程休眠,它可能會被一些信號喚醒(例如:我按下一個鍵)。 – 2012-04-11 15:57:07

回答

4

這是一個跨平臺的功能,我使用:

unsigned Util::getTickCount() 
{ 
#ifdef WINDOWS 
    return GetTickCount(); 
#else 
    struct timeval tv; 
    gettimeofday(&tv, 0); 
    return unsigned((tv.tv_sec * 1000) + (tv.tv_usec/1000)); 
#endif 
} 
+0

我需要一個像time()這樣的函數,但是會得到ms。 – 2012-04-11 15:58:18

+0

@RamyAlZuhouri:好的,我編輯了我的答案。 – trojanfoe 2012-04-11 17:02:04

7

如果你有提升,你可以這樣來做:

#include <boost/thread.hpp> 

int main() 
{ 
    boost::this_thread::sleep(boost::posix_time::millisec(2000)); 
    return 0; 
} 

這個簡單的例子,你可以在代碼中看到,睡2000ms。

編輯:

好吧,我想我明白這個問題,但後來我讀的意見,現在我不那麼肯定了。

也許你想知道自從某個點/事件以來經過了多少毫秒?如果是這樣的話,那麼你可以這樣做:

#include <boost/chrono.hpp> 
#include <boost/thread.hpp> 
#include <iostream> 


int main() 
{ 
    boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now(); 
    boost::this_thread::sleep(boost::posix_time::millisec(2000)); 
    boost::chrono::milliseconds ms = boost::chrono::duration_cast<boost::chrono::milliseconds> (boost::chrono::high_resolution_clock::now() - start); 
    std::cout << "2000ms sleep took " << ms.count() << "ms " << "\n"; 
    return 0; 
} 

(請原諒排長)

+2

「請原諒長排」......哦可愛的助推庫:) – Marlon 2012-04-11 16:40:40

+0

@Marlon你是那麼對! :-) – mantler 2012-04-11 16:42:58

相關問題