FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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のイベントを利用することで、同様の処理を記述することができます。
スポンサーサイト

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

コメントの投稿

非公開コメント

カレンダー
09 | 2018/10 | 11
- 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カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。