我从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)
答案 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;在我的系统上,即使子线程似乎继续执行。由于其他原因,这也是一个糟糕的设计。