VC++ socket多线程编程问题

现在在写一个多线程程序,每个线程定时进行UDP或者TCP通讯,比如5分钟。我想问一下,我可以在每个线程中都调用一次WSAStartup()和WSACleanup()吗?每个线程启动通讯的时间是一样的。
另外我想问下,如果我调用了WSAStartup()而没有调用WSACleanup()会怎样,系统会强制释放吗?多长时间后会强制释放?
谢谢。

WSAStartup()和WSACleanup()在主线程调用一次就行,一般在main函数调用。
不调用WSACleanup()在进程结束后系统会帮你回收资源。
建议还是调用WSACleanup(),写出程序看起来逻辑严谨。追问

因为的我的程序希望一直运行下去,除非关机。所以我在main()函数中调用了一次WSAStartup()后就没有调用WSACleanup(),但是我的程序在运行了54个小时之后所有socket通讯的线程都停了,刚好54个小时,不知道什么原因。

如果我没有调用WSACleanup(),一定时间之后系统不会强制回收资源吧?

追答

“每个线程定时进行UDP或者TCP通讯”——如果你每次进行UDP或者TCP通讯都要创建一个套接字的话,用完之后只要用close()释放就可以了。
所有的线程都停了是什么意思?线程正常结束?错误退出?还是阻塞在某个地方?

追问

阻塞在某个地方了,但是阻塞的时间很随机,有时候一天,有时候两天,现场的电脑没有编译环境,不能确定阻塞在哪里了,所以我也不知道具体是哪里引起的。

追答

如果线程没有退出的话,有可能是阻塞或者是死循环。看看都用了那些阻塞函数,代码执行异常的情况,有没有代码可能会死循环,建议向这个方向分析。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答