我有一个多线程应用程序,在其中创建这样的线程:
int main(int argc,char *argv[])
{
pthread_t thread_id[argc-1];
int i;
struct parameter thread_data[argc-1];
int status;
for(i=0;i<argc-1;i++)
{
thread_data[i].ip_filename = argv[i+1];
strcpy (thread_data[i].op_filename,argv[i+1]);
strcat (thread_data[i].op_filename,".h264");
}
for(i=0;i<argc-1;i++)
{
pthread_create (&thread_id[i], NULL , &thread_function, &thread_data[i]);
}
}
现在在线程函数中, 我想 根据每个线程将stderr
&重定向stdout
到一个单独的文件中。类似于线程日志文件。
我该怎么办?
编辑:
如果可以在其他终端上显示特定于线程的打印。我的意思是,如果有2个线程,那么它将打开2个终端并在不同的终端上打印每个线程的数据。
如果您 真的 必须这样做…
首先,您需要创建2
pthread_key_t
s,一个用于stdout
,一个用于stderr
。这些可以使用创建pthread_key_create
,并且必须可以从所有线程访问。我们称它们为stdout_key
和stderr_key
。
创建线程时:
FILE *err = ..., *out = ...;
pthread_setspecific(stdout_key, out);
pthread_setspecific(stderr_key, err);
然后在您的头文件中:
#define stdout (FILE*)pthread_getspecific(stdout_key)
#define stderr (FILE*)pthread_getspecific(stderr_key)
#define printf(...) fprintf(stdout, ##__VA_ARGS__)
然后只需使用:
fprintf(stderr, "hello\n");
fprintf(stdout, "hello\n");
printf("hello\n");
我不推荐这种方法。
问题内容: 我想将子进程的stderr输出重定向到stdout。常量应该这样做,不是吗? 然而, 确实 输出了一些东西。为什么会这样,如何在stdout上得到错误消息? 问题答案: 仔细阅读源代码即可得出答案。特别是,该文档在显示以下内容时会产生误导: 表示(…)的特殊值表示标准错误应与标准输出进入同一 句柄 。 由于在求值时stdout设置为“默认”(技术上来说),因此stderr也设置为“默认
问题内容: 我在处理pyGTK应用程序时遇到一些问题。我给线程一些时间来完成其任务,如果有问题,我还是继续继续,只是警告用户。但是,一旦我继续,该线程就会停止,直到调用gtk.main_quit为止。这让我感到困惑。 相关代码: .................................... 问题答案: 首先,不要继承,使用。 其次,很可能导致您明显的阻塞的原因是它采用了一个默认值为的参
问题内容: 我目前正在开发一个Python应用程序,希望在该应用程序上查看实时统计信息。我想使用它以使其易于使用和理解。 问题是我的Flask服务器应该在我的Python应用程序的最开始处启动,而在最末尾停止。它看起来应该像这样: 因为我需要我的应用程序上下文(用于统计),所以不能使用multiprocessing.Process。然后,我尝试使用threading.Thread,但是Werkze
问题内容: 我在cyberciti.biz的评论中看到了这个有趣的问题。 我发现我什至找不到在sh的单行命令中执行此操作的灵活方法。 到目前为止,我对解决方案的想法是: 但是您会看到,这不是同步的,而且致命的是,它是如此丑陋。 欢迎与您分享这个想法。:) 问题答案: 你要 这里的顺序很重要。假设stdin(fd 0),stdout(fd 1)和stderr(fd 2)最初都连接到tty,因此 首先
问题内容: 在多线程应用程序中如何使用Hibernate(例如,每个客户端连接在服务器上启动它自己的线程)。 EntityManager应该仅由EntityManagerFactory创建一次,例如: 还是我必须为每个线程以及关闭EM的每个事务重新创建实体? 我的CRUD方法如下所示: 我要不要每次都跑?还是因为每个人都使用自己的缓存创建自己的EntityManager实例而使我陷入麻烦了? 问题
问题内容: 我正在尝试将Hibernate用于多线程应用程序,其中每个线程都检索一个对象并将其插入表中。我的代码如下所示。我每个线程都有本地hibernate会话对象,在每个InsertData中,我都执行beginTransaction和commit。 我面临的问题是很多次我收到“ org.hibernate.TransactionException:不支持嵌套事务” 由于我是hibernate