scanf()在Thread中不起作用

时间:2017-09-29 11:24:15

标签: c multithreading ubuntu unix

我从Dispatched Thread获取输入并对其进行一些计算。我在使用scanf()的{​​{1}}从线程获取输入时遇到问题。 控制台不提示输入。这是我的代码

stdio.h

我尝试#include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<pthread.h> #include<stdio.h> void* square(){ puts("\nfirst line of child\n"); int input,i=0; fflush(stdin); scanf("%d",&input); do{ scanf("%d",&i); }while(i!=0); printf("\ninput is %d\n",input); puts("\nlast line of child\n"); pthread_exit(NULL); } int main(void){ puts("\nI'm Parent & I'm Starting\n"); pthread_t thread; pthread_attr_t pthread_attr; pthread_attr_init(&pthread_attr); pthread_attr_setdetachstate(&pthread_attr,PTHREAD_CREATE_DETACHED); pid_t tid = pthread_create(&thread,& pthread_attr,square,NULL); puts("\nI'm Parent & I'm going to exit\n"); return EXIT_SUCCESS; } 来刷新输入流,但这也无法帮助我。

我得到的是(这不执行输入行)。

fflush(stdin)

1 个答案:

答案 0 :(得分:3)

删除:

    fflush(stdin);

并将这些更改发送到main:

    pthread_create(&thread,&pthread_attr,square,NULL);
    (void)pthread_join(thread, NULL); // <--- will wait for thread

然后它可能会按预期工作。

另一种方法是使用pthread_exit()终止主线程,然后让子进程继续,但这将是一个非常糟糕的设计。它实际上离开了pid&#34; defunct&#34;在我的系统上,即使子线程似乎继续执行。由于其他原因,这也是一个糟糕的设计。