Program Language/C & C++

[C++] async로 간단하게 thread 만들기

야곰야곰+책벌레 2022. 7. 8. 15:14
728x90
반응형
class threadAsync
{
	atomic_bool exitf_;
	int count_;
	string name_;

public:
	threadAsync(string threadName) : exitf_(false), count_(0), name_(threadName)
	{}
	~threadAsync()
	{
		exitf_ = true;
	}

	bool OnThread(bool* run)
	{
		while (!exitf_)
		{
			if (*run)
			{
				printf("%s : %d\n", name_.c_str(), count_);
				count_++;
				this_thread::sleep_for(100ms);
			}
			else
			{
				this_thread::sleep_for(100ms);
				this_thread::yield();
			}
		}

		return 0;
	}
};

vector<threadAsync*> g_threads;

int main()
{
	g_threads.resize(2);
	g_threads[0] = new threadAsync("Thread A");
	g_threads[1] = new threadAsync("Thread B");
	bool run = true;
	future<bool> _futA = async(&threadAsync::OnThread, g_threads[0], &run);
	future<bool> _futB = async(&threadAsync::OnThread, g_threads[1], &run);

	return 0;
}

2개의 thread class를 선언한 뒤 두 개의 thread를 async로 만들어 thread를 구성한다. 간단한 예제이므로 async의 option에 대해서는 테스트하지 않는다.

728x90
반응형