FC2ブログ

Qtで一定時間間隔で処理を実行するサブスレッドを作る方法まとめ

Qtで一定時間間隔で処理を繰り返し行う方法をまとめてみました。


・サブスレッド ヘッダ
#pragma once

#include <QThread>

class MyThread : public QThread
{
  Q_OBJECT

public:
  MyThread(QObject* parent=0);

protected:
  void run();

private slots:
  void timerHit();
};


・サブスレッド ソース
#include "StdAfx.h"
#include "MyThread.h"

MyThread::MyThread(QObject* parent) : QThread(parent)
{
}

void MyThread::run()
{
  QTimer timer;
  connect(&timer, SIGNAL(timeout()), this, SLOT(timerHit()), Qt::DirectConnection);

  timer.setInterval(10);
  timer.start();
  exec();
  timer.stop();
}

void MyThread::timerHit()
{
  // これが繰り返し実行される
}


・サブスレッド利用側
FormMain::FormMain(QWidget *parent, Qt::WFlags flags)
  : QMainWindow(parent, flags)
{
  ui.setupUi(this);

  // スレッド開始
  m_MyThread.start();
}

// 終了時の処理
FormMain::~FormMain()
{
  m_MyThread.quit();
  m_MyThread.wait();
}


どうもQtのAPIの中に簡単に呼び出せるSleepがないらしく、良く使われる、for(;;)ループとsleepの組み合わせが使えないっぽいです。

代わりに、QTimerのイベントを利用することで、同様の処理を記述することができます。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター