1

我在多线程程序中遇到问题。我的程序有 4 个线程总是在这里。我们将这些线程命名为 1 到 4。

我的程序的目标是在套接字上与外围设备进行通信。线程号 4 用于将消息发送到外围设备。

每次向外围设备发送消息时,我使用:

pthread_create(&m_hThreadMsgReader, NULL, &ThreadMsgReader, (void*) &argStruct);

这将创建一个线程来监听套接字上的响应,当套接字不再包含消息时,该线程将返回:即如果iRet = recv(m_iSocket, pcRecBuf, DEFAULT_READ_DATA_LEN, 0);使 iRet 取值为 0。

因此,对于当前的实现,在外围设备上(每分钟)进行一次数据池(除了通过用户输入发送的其他命令)。

这里的问题是,几个小时后,pthread create 将崩溃并出现错误 11。我在堆栈溢出时看到这意味着系统可能没有足够的资源或线程过多。

但我不明白,因为在 QtCreator 调试中,我只能看到从 1 到 4 的线程。我知道我可能已经创建了 300 个线程,但线程列表只包含 4 个,这意味着所有其他线程都已终止。

所以我真的不明白线程创建的最大数量是在进程的整个生命周期内还是同时存在的线程数。

我是否应该找到一种方法让单个线程进行监听,即使它会在空套接字上进行监听?我的实现是一个糟糕的模式吗?

4

1 回答 1

2

您应该调用pthread_join释放获得的资源。PTHREAD_CREATE_DETACHED或者您可以在不需要使用的情况下使用属性pthread_join

于 2013-05-16T07:20:55.897 回答