SSブログ

クラス間の機能分担とQtのスレッド [Qt]

さて、今週はQtの話に戻ります。前回、バックアップ処理の実現に何らかの並行処理が必要なことに気付きました。って、最初から気づけよと言う感じですかね・・。手動で停止することが頭に無かったのでした。

「並行処理」でぱっと思いついたのが「スレッド」ですが、Qtにはどのような並行処理が用意されているのでしょうか・・?と思って、リファレンスを眺めていたら、スレッドのページがありました。ここを読んで行きましょう。

*

単純にスレッドを実行するには、下記の通り行えばいい様です。



クラス図にすれば、こんな感じでしょうか?ファイルのバックアップ処理を行うクラスを「BackupMain」としました。

11012500.png
バックアップ処理をスレッド化する際のクラス図


どういう機能のクラスにすればいいですかねぇ・・。バックアップ処理の分担分けとしては、下記の通りにしたい気がします。

BackupControl バックアップ元ファイルとバックアップ先ディレクトリを選定し、BackupMainに通知。 BackupMainの開始と停止制御。
BackupMain BackupControlから指定された情報を元に順次バックアップを実行。


実装イメージとしては、BackupMain内にバックアップ元、バックアップ先(今回の場合、バックアップ元一つ一つに持たせる意味はありませんが・・)のペアを保存するキューを持たせ、BackupControlからそこにファイルのパスを追加、BackupMainでパスを取り出してコピーを実行としたいと思っています。

・・・とここまで考えていましたが、も一つスレッドが必要かも・・・。バックアップ元のファイルの抽出をBackupControlで行っていると、停止ボタンのイベントが拾えない気がします。と言うか、ファイルパスの抽出と実行を同じスレッドですればいいか・・。

機能分担を考えなおすとこんな感じでしょうか。

BackupControl バックアップ元ディレクトリとバックアップ先ディレクトリをBackupMainに通知。 BackupMainの開始と停止制御。
BackupMain BackupControlから指定された情報を元に対象ディレクトリを選定し、順次バックアップを実行。


ま、ほぼ一緒ですね。バックアップ元のディレクトリとバックアップ先ディレクトリをまとめてBackupMainに渡して、後は勝手にやってくれと言う感じにしましょう。

先程のキューの排他処理が必要かと思ってましたが、この構成にすれば、それも不要ですね。


と言う感じで、実装して行きましょう。


【参考】
Thread Support in Qt - Qt 4.5.3






nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

ブログを作る(無料) powered by SSブログ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。