删除对象时杀死一个线程

时间:2010-05-13 04:40:38

标签: c++ sockets

我有一个应用程序可以与某些硬件进行一些套接字通信。 假设我有一个对象的特定硬件,并且该对象启动一个线程,该线程在无限制地监听特定端口号5001,直到建立连接为止。

现在如果我删除了这个obect,无论如何我可以确保正在侦听端口号5001的线程无限地被破坏。

所以问题是每当创建同一设备的新对象时,旧线程不会被破坏,因此存在线程泄漏。

3 个答案:

答案 0 :(得分:1)

在Windows中,您可以使用WaitForSingleObject函数来检查线程是否已退出(您可以将线程的句柄传递给参数)。你可能想要创建一个启动线程退出的事件。

答案 1 :(得分:1)

在这种情况下,您需要使用非阻塞套接字。在阻塞套接字的情况下,Accept()调用块直到有连接。 您可以使用ioctlsocket使套接字无阻塞,并从Accept()调用中检查错误代码WSAEWOULDBLOCK。 当然,修改你的无限循环以使用WaitForSingleObject。

更多信息here

答案 2 :(得分:0)

可能值得设置一个变量来说明线程循环应该退出然后将一些数据发送到套接字。这将导致套接字接收数据,唤醒,发现退出和退出的时间。