【问题标题】:Client terminating on execution (pthread)客户端终止执行(pthread)
【发布时间】:2012-12-01 01:26:02
【问题描述】:

我有一个套接字编程问题。我正在运行服务器,然后它等待客户端。但是,一旦我运行客户端,什么都没有发生,它只是终止并返回提示。基本上它编译得很好,但它根本不运行。我一运行它就会终止。这只发生在我在客户端代码中使用线程时。

这是我正在使用的代码:

if(pthread_create(&threadID[i++], NULL, (void *)dostuff, (void *)(intptr_t)sock) != 0)  
        {
        perror("Thread create error");
        }

另一方面,如果我只是简单地输入

dostuff(sock);

客户端程序确实执行。我需要线程,因为我需要实现 I/O 多路复用。您能告诉我如何在我使用线程时阻止客户端终止吗?

【问题讨论】:

  • @Douglas 请告诉我该怎么做。我真的疯了!我的最后期限是几个小时后!

标签: c sockets pthreads


【解决方案1】:

您需要等待线程完成才能退出程序,例如使用pthread_join

// do this before returning from main
pthread_join(threadID[i], NULL);

【讨论】:

  • 是的,这正是我所做的。我把它放在 pthread_create 循环之后。它什么也没做。应该是 i++ 还是 i?
  • 我在 pthread_create int res; 之后添加了这个res = pthread_join(threadID[i], NULL); printf("pthread 加入?\n"); if(res != 0) { perror("线程连接失败");现在我的客户端程序的第一行打印出来了,但是我得到 Thread join failed: Success
  • 从 main 返回之前?你这是什么意思?
  • 我只使用[i] 过于简单化了。如果您正在创建一个 threadId 数组,则必须遍历它们(例如使用 for 循环)并依次等待每个。
  • 我假设你的调用堆栈中有一个main function。当你从那里返回时,通常你的过程结束。
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
  • 2015-08-07
  • 2011-04-17
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多