一定時間、マウスカーソルの位置を記録して、それを画面と同じサイズの画像に軌跡として描画します。
OpenCVをちょっと触ってみたくて、お遊びで作ったものです。
- CMake 3.25以上
mkdir build && cd build
cmake ..
make
これで実行ファイルmain.exe
が生成されるので、
chmod +x ./main.exe
./main.exe 1 2
これで、実行してから1秒後から2秒間のカーソル座標を記録する。 引数の詳細は下の方に記載。
記録されたカーソルの軌跡は画像として、実行ディレクトリに保存される。
ファイル名はoutput.png
。
- [long] 記録開始までの時間 [秒]
- [long] 記録の期間 [秒]
- [long] 記録の間隔 [ミリ秒](デフォルト:50ミリ秒)
- GUI機能
- ボタンクリックを開始/終了とする
- 指定キー(スペースキー)押下を開始/終了とする
- 時間指定
- 今すぐスタート/今すぐストップ
- スタート・ストップのタイミングを時刻で指定
- スタート・ストップのタイミングを現在からの経過時間で指定
- 背景を透過するかどうかを選択
- 線の色を指定
- 画像の保存場所を指定
- 画像のファイル名を指定
- Debugモード
- 詳細なログを出力
- macOS対応
- Linux対応
for
ループの中にsleep
を入れる方法とstd::thread
を使用する方法にはいくつかの違いがあります。
-
シンプルさ:
for
ループ内でsleep
を使用する方法はシンプルで直感的です。処理の一部としての時間待ちを明確に示すことができます。
-
単純な周期的な処理:
- 単純な周期的な処理を行う場合には、
for
ループとsleep
を組み合わせることで、比較的簡単に実装できます。
- 単純な周期的な処理を行う場合には、
-
非同期処理:
std::thread
を使用することで、処理をメインスレッドから分離し、非同期で実行できます。これにより、他の処理と並行して時間を待つことができます。
-
柔軟性:
std::thread
を使用すると、スレッド内で処理を実行しながら、そのスレッドを停止させる時間やタイミングをより柔軟に制御できます。sleep
は一定の時間待つだけですが、std::thread
を使うとスレッドを動的に制御できます。
-
複雑な処理の分離:
std::thread
を使用することで、複雑な処理をスレッド内で管理し、メインスレッドと分離することができます。これにより、処理の複雑さに応じてスレッドごとに制御できます。
-
同時性:
std::thread
を使うことで、複数の処理を同時に実行し、マルチタスクを実現できます。これにより、システム全体のレスポンスが向上する場合があります。
ただし、std::thread
を使う際には、マルチスレッドプログラミングに伴う注意が必要です。同期、競合条件、デッドロックなど、スレッドセーフなコードを書くことが重要です。また、スレッドの管理やオーバーヘッドについても考慮する必要があります。