塵界 さんが書きました: ↑6年前
ControlThread() の部分が怪しいと思いブレークポイントを仕込んだりした結果whileがすっ飛ばされていることがわかった。
なぜ、while がすっ飛ばされているのか調べてみました。
コード:
#include <stdio.h>
#include <conio.h>
int main()
{
while (1) {
int c = _getch();
printf("c = %02x\n", c);
if (c == 0x1b) break;
}
}
このプログラムを実行し、0 1 a F1 F12 Esc を入力した
ときの実行結果は次のようになりました。
コード:
c = 30
c = 00
c = 31
c = 00
c = 61
c = 00
c = 00
c = 3b
c = e0
c = 86
c = 1b
_getch() で、キー入力を読み取ると、
入力バッファには常に 2バイトのデータが入るようです。
通常の文字の場合は、2バイト目が 00、
ファンクションキーや矢印キーなどは、
1バイト目が 00 または e0 です。
main で '1' を入力して、それを _getch() で読み込んでも
まだ入力バッファには 00 が残っているので、ControlThread
に入って while (!_kbhit()) を実行した時、 _kbhit() が 1 を
返し、それを !演算子で反転して 0 になるので、while の中
の文に行かず、ループを抜けて次の文に行っているようです。