2012-04-11 2 views
4

Я нашел функцию usleep в unistd.h, и я подумал, что было полезно подождать некоторое время перед каждым действием. Но я обнаружил, что поток просто спит, если он не получает никакого сигнала Например, если я нажму кнопку (я использую OpenGL, но вопрос более конкретный о time.h и unistd.h), поток пробуждается, и я не получаю то, что хочу. В time.h есть функция sleep, которая принимает целое число, но целое число слишком велико (я хочу подождать 0,3 секунды), поэтому я использую usleep. Я спрашиваю, есть ли функция, требующая времени в миллисекундах (из любой GNU или любой другой библиотеки). Он должен работать как time(), но возвращает миллисекунды вместо секунд. Возможно ли это?Время в миллисекундах

+0

Можете ли вы быть более четкое представление о том, чего не нравится 'usleep'? Насколько я могу судить, он делает именно то, что вы хотите (ну, за исключением μs вместо ms). –

+0

У меня вопрос не возникает. Разве это не 'microtime', что вы ищете? – nothrow

+0

Проблема в том, что мне не нужна функция сна, но функция «getTime in ms». Если поток спит, его можно разбудить некоторым сигналом (например: нажмите клавишу). –

ответ

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. –

+0

@RamyAlZuhouri: Хорошо, я отредактировал свой ответ. – trojanfoe

7

Если у вас есть импульс вы можете сделать это следующим образом:

#include <boost/thread.hpp> 

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

Этот простой пример, как вы можете видеть в коде , спит на 2000 мс.

Edit:

Хорошо, я думал, что я понял вопрос, но потом я прочитал комментарии, и теперь я не так уверен.

Возможно, вы хотите получить, сколько миллисекунд прошло с какого-то момента/события? Если это так, то вы могли бы сделать что-то вроде:

#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

+0

@Marlon Вы так правы! :-) – mantler

Смежные вопросы