我对pthread_create
有疑问。我想创建一个跟踪键盘按钮的线程,例如,当我按下空格键时,程序将中止主循环。
这是我的代码(创建一个帖子):
void check_button_code(int *btn);
// main
pthread_t trd;
int btn = 1;
pthread_create(&trd,NULL,check_button_code, &btn);
打破行动
void check_button_code(int *btn) {
int a;
printf("Press space to pause\n.");
while (1) {
a = getchar();
if (a == 32) {
*btn = 0;
break;
} else {
printf("error %d\n", a);
}
}
printf("zatrzymane\n");
}
提前感谢您的帮助。
答案 0 :(得分:1)
首先,您必须等待线程完成。在返回之前添加到main,
pthread_join(trd, NULL);
否则,主线程在创建线程后立即结束。您的 main()函数应该看起来像
int main() {
pthread_t trd;
int btn = 1;
pthread_create(&trd,NULL,(void*)check_button_code, &btn);
pthread_join(trd, NULL);
return 0;
}
然后getchar()
在按下CR之前不会渲染char。因此,要使线程读取空格,您必须输入空格,然后按 ENTER 。
要动态处理字符,请参阅this answer, for instance。这样, space 将在等待输入被按下之前被处理。