#JavaのThread感覚で使えるクラスがC++でも欲しい
Javaでマルチスレッドプログラミングを行う際の基本といえば、Threadクラス(もしくはRunnableインターフェース)を継承(実装)し、run()メソッドをオーバーライドするというものです。
C++でもC++11から標準でstd::threadが使えますが、個人的にはJavaのThreadクラスのほうが使いやすいと思っています。
C++でもQtなどを使えばQThreadが同じような感覚で使えますが、C++標準のthreadを使って同じようなクラスを作成することは可能です。
#C++で作るThreadクラス
Thread.hpp
#ifndef THREAD_HPP_INCLUDED
#define THREAD_HPP_INCLUDED
#include <thread>
class Thread
{
public:
Thread() {}
~Thread() {}
void start()
{
_th = std::thread(&Thread::run, this);
}
void join()
{
_th.join();
}
protected:
virtual void run() = 0;
private:
std::thread _th;
};
#endif
スレッドに行わせる処理はrun()関数に定義するので、これは純粋仮想関数にしておきます。
実際に使用する際は、このThreadクラスを継承します。
ThreadImpl.hpp
#include <iostream>
#include "Thread.hpp"
class ThreadImpl : public Thread
{
public:
ThreadImpl() {}
~ThreadImpl() {}
protected:
void run() override;
};
inline void ThreadImpl::run()
{
std::cout << "Thread is doing some work...\n";
}
main.cpp
#include <iostream>
#include "ThreadImpl.hpp"
int main()
{
ThreadImpl th;
th.start();
th.join();
return 0;
}