thread 실행 후 join 또는 detach 로 핸들링 해야함.
#include<iostream>
#include<mutex>
#include<thread>
#include<chrono>
class MyClass{
std::mutex mtx_count;
int iCount;
public :
MyClass()
{
iCount = 0;
}
~MyClass(){}
int getCount()
{
return iCount;
}
void workThread(int iIdx)
{
while(1){
mtx_count.lock();
iCount++;
mtx_count.unlock();
// printf("run workThread(%d):%d\n", iIdx, iCount);
// std::this_thread::sleep_for (std::chrono::seconds(1));
}
}
void runThread(int iIdx)
{
printf("runThread() - start\n");
for(int i = 0; i < 4; i++){
std::thread th_test = std::thread([=]{workThread(i);});
// thread를 실행 해놓고 runThread 가 종료되면 [terminate called without an active exception]가 발생.
// join 또는 loop 문으로 runThread가 종료되지 않게 하던지 detach를 하여 thread와의 연(?)을 끊는다.
th_test.detach();
}
}
void start()
{
runThread(0);
std::thread th_test = std::thread([=]{workThread(0);});
while(1){
printf("run start()\n");
std::this_thread::sleep_for (std::chrono::seconds(1));
}
}
};
int main()
{
MyClass _MyClass;
std::thread th_test = std::thread(&MyClass::start, &_MyClass);
while(1){
printf("run main() - _MyClass.getCount():%d\n", _MyClass.getCount());
std::this_thread::sleep_for (std::chrono::seconds(1));
}
}