我在多线程程序中遇到问题。我的程序有4个线程总是在这里。 我们将这些线程命名为1到4。
我的程序的目标是在套接字上与外围设备进行通信。 线程号4用于将消息发送到外设。
每次将消息发送到外围设备时,我都会使用:
pthread_create(&m_hThreadMsgReader, NULL, &ThreadMsgReader, (void*) &argStruct);
这将创建一个线程来监听套接字上的响应,当套接字不包含任何消息时,该线程将返回:ie
如果iRet = recv(m_iSocket, pcRecBuf, DEFAULT_READ_DATA_LEN, 0);
使iRet取值0。
因此,对于当前的实现,在外围设备上进行数据池(每分钟)(除了通过用户输入发送的其他命令)。
这里的问题是,几个小时之后,pthread create会崩溃并出现错误11.我在堆栈溢出时看到,这意味着系统可能没有足够的资源或太多的线程。
但我不明白,因为在QtCreator调试中,我只能看到1到4的线程。我知道我可能创建了300个线程,但是线程列表只包含4个,这意味着所有其他线程都是终止。
所以我真的不明白线程创建的最大数量是在进程的整个生命周期内还是同时出现的线程数。
我是否应该找到一种方法来监听单个线程,即使它会侦听空套接字?我的实施是不好的模式吗?
答案 0 :(得分:1)
您应该致电pthread_join
以释放所获得的资源。或者您可以使用属性PTHREAD_CREATE_DETACHED
,在这种情况下,您不需要使用pthread_join