2015-10-26 3 views
1

Мой код, как это,Как использовать поток для отправки сообщений каждые 0,3 секунды?

int main() { 
    while(true) { 

    ...//calculate the result(about 0.25s) 
    int result = ...; 
    } 
} 

В моем коде, каждый цикл я могу получить новое значение результата, я хочу использовать нить, чтобы сохранить ценность и вывод результата последнее значение каждый 0.3S. Как я могу это сделать? Потому что я раньше не использовал поток. Может кто-нибудь мне помочь?

ответ

2

Easy (и действительно неуклюжим) способ:

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

// 0.3 seconds 
constexpr  std::chrono::duration<int, std::micro> ms300(300000); 
// 0.1 seconds for time waster. 
constexpr  std::chrono::duration<int, std::micro> ms100(100000); 

// thread task loop 
void taskloop() 
{ 
    // just 10 iterations. Replace with proper termination condition 
    for (int count = 0; count < 10; count++) 
    { 
     auto start = std::chrono::high_resolution_clock::now(); 
     //calculate result 
     std::this_thread::sleep_for(ms100); // time waster for test 

     // output result. 
     std::cout << start.time_since_epoch().count() << ":" << count << std::endl; 
     auto delta = std::chrono::high_resolution_clock::now() - start; 
     auto sleeptime =ms300 - delta; 
     std::this_thread::sleep_for(sleeptime); 
    } 
} 
int main() 
{ 
    // start thread and call taskloop 
    std::thread testthread(taskloop); 
    // wait for thread to end. 
    testthread.join(); 
} 
+0

Thank you.But мой вопрос - как использовать нить это сделать. – kookoo121

+0

@ kookoo121 достал тебя. – user4581301

+0

@ kookoo121 как это? – user4581301

0

Вы можете сделать:

#include <iostream> 
#include <thread>   // std::this_thread::sleep_for 
#include <chrono>   // std::chrono::seconds 

using namespace std; 


int main() { 

    while (true) { 

     //calculate the result(about 0.25s) 
     cout << "0.3 Seconds now!"; 
     this_thread::sleep_for(std::chrono::seconds(3/10)); 

    } 

} 

Это использует thread и chrono. Вы можете найти его here.

+0

Благодарим Вас за comment.But в этом случае, основной поток просто ждать больше 0.3s.It не может выводить каждый 0.3с – kookoo121

+0

@ kookoo121 Ooppss .. Прости. Наверное, у меня есть намного больше, чтобы узнать ха-ха. Также спасибо за то, что ты добрый! – Santosderek

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