« とりあえずUS Keyboard対応の準備をする | トップページ | とりあえずマウスイベントを確認する »

2014年9月17日 (水)

キーボード、マウス情報をバッファリングする

キーボードやマウスの動作の情報(イベント)はQWidgetを継承したMainWindowというクラスで処理しています。
キーが押されたり、マウスのボタンをクリックする度に特定の関数が呼ばれる仕組みになっていて、どのキーが押されたかとかどのマウスボタンが押されたかなどの情報は関数の引数として渡ってきます。

これらの情報を時系列で順番にBrynhildrサーバーさんに送ります。ただ、これらの情報を貯めておくところはMainWindowクラスの中なのですが、Brynhildrサーバさんと通信するのはMainWindowと同じスレッドではありません。

このため、マルチスレッドでの生産者と消費者の問題が生じます。「入門Qt4プログラミング」の第18章マルチスレッド に簡単な説明がありますね。まぁ、簡単にいうとキーボードを押したはずなのに、押せなかったり、マウスの動きが変だったりするわけですね、多分。

で、これを正確に処理するために、データを書き込んでいる途中で読み出したり、読みだしている途中で上書きしたりするようなことを回避する仕組みを入れるないといけません。

Qtではそのための仕組みがいくつか実装されていて、お手軽に使うことができるようです。ただし、基本的な概念を知っておく必要はあると思います。

その仕組みを入れる前にまずキーボード/マウスの情報を貯めておくためのクラスを作ろうと思います。PCMデータの送受信でも使ったリングバッファというものを使います。

« とりあえずUS Keyboard対応の準備をする | トップページ | とりあえずマウスイベントを確認する »

コメント

コメントを書く

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

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

トラックバック


この記事へのトラックバック一覧です: キーボード、マウス情報をバッファリングする:

« とりあえずUS Keyboard対応の準備をする | トップページ | とりあえずマウスイベントを確認する »