【发布时间】:2011-07-27 16:46:04
【问题描述】:
我正在尝试查看标准输入以查看是否有任何使用 pthreads 的内容。我(想我)需要这样做,因为如果 std in 中没有任何内容,流访问函数将阻塞输入。
我觉得这样做的方法是启动一个检查标准输入的 pthread,然后 sleep(1) 并查看该线程是否找到任何东西。
这是我目前所拥有的。如果没有任何东西通过管道传输到程序中,那么它将按预期休眠,但如果 stdin 中有内容,则线程永远不会被触发。
#include <iostream>
#include <pthread.h>
#include <stdlib.h>
using namespace std;
void *checkStdIn(void *d){
char c = '\0';
c = cin.peek();
if (c){
cout << c << endl;
}
}
int main(int argc, char *argv[]){
pthread_t thread;
int rc;
rc = pthread_create(&thread, NULL, checkStdIn, NULL);
if (rc){
cerr << "Error no. " << rc << endl;
exit(EXIT_FAILURE);
}
sleep(2);
return 0;
}
【问题讨论】:
-
程序在执行线程之前就结束了。
-
为什么 sleep() 不补救呢?
-
你的线程检查输入一次,什么也没找到并终止。
-
@Ty:如果要等待线程完成,请使用 phthread_join
-
忘记我之前的评论,这是错误的。