2013-04-06 2 views
1

Я пытаюсь выяснить, как рассчитать время в C++. Я делаю программу, где каждые 3 секунды происходит событие, например, распечатывать «привет» и т. Д .;Как рассчитать время в C++?

+0

Это зависит от вашей библиотеки обработки событий. Сам C++ не предоставляет какой-либо системы событий, но ни в коем случае система, которую я когда-либо использовал, знает о том, что системное время и дата помогают установить повторяющееся событие. –

+0

Вы всегда можете сделать поток, который выполняет функцию и цикл, спящий три секунды и вызывающий его. Это его обобщает и позволяет повторно использовать. Однако, если я собираюсь это сделать, не торопитесь спать. – chris

+1

Вы не просто ищете функцию [сна] (http://linux.die.net/man/3/sleep)? запустите новую нить и позвольте ей бесконечно зацикливаться, где вы спите в течение 3 секунд и печатаете привет. – A4L

ответ

1

вы можете использовать boost::timer для расчета времени в C++:

using boost::timer::cpu_timer; 
using boost::timer::cpu_times; 
using boost::timer::nanosecond_type; 
... 
nanosecond_type const three_seconds(3 * 1000000000LL); 

cpu_timer timer; 


    cpu_times const elapsed_times(timer.elapsed()); 
    nanosecond_type const elapsed(elapsed_times.system + elapsed_times.user); 
    if (elapsed >= three_seconds) 
    { 
    //more then 3 seconds elapsed 
    } 
3

Вот пример с использованием двух потоков таким образом ваша программа не будет замерзать и this_thread::sleep_for() в C++ 11:

#include <iostream> 
#include <chrono> 
#include <thread> 

using namespace std; 

void hello() 
{ 
    while(1) 
    { 
     cout << "Hello" << endl; 
     chrono::milliseconds duration(3000); 
     this_thread::sleep_for(duration); 
    } 
} 

int main() 
{ 
    //start the hello thread 
    thread help1(hello); 
    //do other stuff in the main thread 
    for(int i=0; i <10; i++) 
    { 
     cout << "Hello2" << endl; 
     chrono::milliseconds duration(3000); 
     this_thread::sleep_for(duration); 
    } 
    //wait for the other thread to finish in this case wait forever(while(1)) 
    help1.join(); 
} 
0

It зависит от вашего OS/Compiler.

Случай 1:
Если у вас есть C++ 11, то вы можете использовать как предложил Крис:
станд :: this_thread :: sleep_for() // Вы должны включить заголовочный файл нить

Case 2:
Если вы на платформе окон, то вы также можете использовать что-то вроде:

#include windows.h 
int main() 
{ 
    event 1; 
    Sleep(1000); // number is in milliseconds 1Sec = 1000 MiliSeconds 
    event 2; 
    return 0; 
} 

случай 3:
на платформе Linux вы можете просто использовать:
сон (в секундах);

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