マルチスレッドのプログラムで1つのスレッドでキー入力を受け付け、特定のキーが押されたら動作終了し、もう一つのスレッドを終了させたい
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <thread>
#include <string.h>
using namespace std;
int loop();
void MainThread();
void KEYControlThread();
bool gThreadDone = false;
int main(void) {
int proc_error = 0;
char c;
while (!_kbhit()) {
system("cls");
cout << "menu : " << endl;
cout << " 0 - exit" << endl;
cout << " 1 - start" << endl;
c = _getch();
if ((c == 0x1B) || (c == '0')) { break; }
if ((c == '1')) { proc_error = loop(); }
}
}
int loop() {
system("cls");
//スレッド処理の開始
thread th1(MainThread);
thread th2(ControlThread);
th1.join();
th2.join();
return 0;
}
void MainThread() {
while (gThreadDone == false) {
cout << "test " << endl;
}
return;
}
void ControlThread() {
char c;
while (!_kbhit()) {
c = _getch();
if ((c == 0x1B) || (c == '0')) {
gThreadDone = true;
break;
}
}
return;
}
わかった。
[1.3] どのようなエラーやトラブルで困っているか
ControlThreadのwhileが機能せず、gThreadDone == falseのままで動作が続行してしまう。
[1.4] 今何がわからないのか、知りたいのか
_kbhitの使用方法が間違っているのか、それともマルチスレッドの作り方を失敗してるのか。
[2] 環境
win10,visualstudiocommunity2017