使用pthread_create在C中创建一个线程

时间:2017-11-21 05:07:12

标签: c

我对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");
}

提前感谢您的帮助。

1 个答案:

答案 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 将在等待输入被按下之前被处理。