« キーボードコントロールを実装しました その4 | トップページ | スレッドの変遷のメモ その2 »

2014年11月13日 (木)

スレッドの変遷のメモ

スレッドの構成の変遷について

----------------------------------------------------------------------------------
[最初のバージョン]
----------------------------------------------------------------------------------

シングルスレッドバージョンでした。1つのスレッド内で以下を行います。

1,キーボード、マウスのコントロール情報の送受信
2,JPEGファイルデータの受信、JPEGファイルの描画
3,PCMデータの受信、サウンド再生バッファへの転送

1つのスレッド内で非同期に行いますが、一度に1つの処理しかできないので、JPEGファイルデータの描画を待っている間はPCMデータのサウンド再生バッファへの転送が待たされるため、音が途切れる現象が発生しました。

----------------------------------------------------------------------------------
[3つの通信を別スレッドに分けたバージョン]
----------------------------------------------------------------------------------

キーボード、マウスのコントロール情報の送受信で1つのスレッド、JPEGファイルデータの受信、JPEGファイルデータの描画で1つのスレッド、PCMデータの受信、サウンド再生バッファへの転送で1つのスレッド、計3つのスレッドを設けました。

各スレッドは、マルチスレッドで動作するので、JPEGデータの描画を待たずに、PCMデータの転送が行えるのでノイズを回避出来ます。が、QTcpSocketを複数のスレッドで生成して送受信するため、正確なデータが受信できないことがあり、不正なJPEG、PCMデータを受信してしまい、結局デスクトップ画像も、サウンドもノイズが入ってしまうという結果になりました。

----------------------------------------------------------------------------------
[ネットワーク通信だけを行うスレッドとPCMデータのサウンド再生バッファへの転送を行うスレッド]
----------------------------------------------------------------------------------

ネットワーク通信を行うスレッドは1つであるのが望ましい、但しJPEGデータの描画を行うスレッドとPCMデータをサウンド再生バッファへ転送するスレッドは分けたい、ということで2つのスレッドでの構成にしました。データの送受信が正確にでき、JPEGファイルデータの描画とPCMデータの転送が効率よく行えます。

きれいな構成としては、JPEGファイルデータの描画も別スレッドにするのがいいのですが、あまりスレッドを設けすぎるのも問題ですね、たぶん。

(追記)
ネットワーク通信を行うスレッド中からJPEGデータの描画を行う処理も別スレッドで分離する必要があるようです。同じスレッドで処理している現在の構成では、PCMデータの再生にデータ転送が間に合っていません。
困りました…

----------------------------------------------------------------------------------
とりあえず現在は以下の3スレッド構成です。
----------------------------------------------------------------------------------

1, ネットワーク通信を行うスレッド

3つのソケットを接続し、キーボード/マウス情報送信、JPEGファイルデータ、PCMデータの受信のみを行います。JPEGファイルデータ、PCMデータはリングバッファへの転送まで行います。キーボード/マウス(コントロール)情報の送受信のみ同じスレッド内で行います。

2, JPEGファイルデータ描画を行うスレッド

リングバッファから1枚ずつJPEGファイルデータを取り出し、描画します。リングバッファが空ならなにもしません。

3,PCMデータの再生を行うスレッド

タイマーを使って、定期的にリングバッファからPCMデータを取り出し、再生用のバッファへ転送します。再生用のバッファが空になると音が途切れてしますので、途切れないように転送する必要があります。

« キーボードコントロールを実装しました その4 | トップページ | スレッドの変遷のメモ その2 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/2011805/57979732

この記事へのトラックバック一覧です: スレッドの変遷のメモ:

« キーボードコントロールを実装しました その4 | トップページ | スレッドの変遷のメモ その2 »

無料ブログはココログ
2017年4月
            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