1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++でJavaのThread風に使えるクラスを実装する

Last updated at Posted at 2021-11-01

#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;
}
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?