Static 함수로 유일한 Thread 구현




 

#include <iostream> #include <thread> #include <time.h> using namespace std; class Tester { private: static thread tickThread; static bool isRunning; public: static void thread_sleep(int ms) { #ifdef Q_WS_MAC clock_t pass = ms * 1000 + clock(); #else clock_t pass = ms + clock(); #endif while(pass > clock() && isRunning == true); } static void Run(float duration) { //쓰레드가 살아 있다면, 쓰레드 루프를 탈출 시킨다. if(tickThread.joinable() == true) { cout << "cancel thread : id( " << tickThread.get_id() << " )" << endl; isRunning = false; } //쓰레드 개체를 생성 혹은 할당 하고 람다식으로 쓰레드 작업을 수행 한다. tickThread = thread([duration]() { cout << "start thread : id( " << tickThread.get_id() << ")" << endl; isRunning = true; clock_t time = clock() + (duration * 1000); int test_count = 0; while(time > clock() && isRunning == true) { cout << "inthread : " << test_count << endl; test_count ++; thread_sleep(1000); } //쓰레드 객체를 detach 한다. //쓰레드 종료 하기 직전에 사용한다. isRunning = false; tickThread.detach(); cout << "end thread " << endl; }); } }; //static 초기화 thread Tester::tickThread; bool Tester::isRunning; //.... 활용 ..... void keyReleaseEvent(QKeyEvent *evt) { if(evt->key() == Qt::Key_Space) { Tester::Run(3.0f); } }




Yamecoder 야매코더_
C++(Qt) 2015.10.06 16:15
Powerd by Tistory, designed by criuce
rss