现在在写一个多线程程序,每个线程定时进行UDP或者TCP通讯,比如5分钟。我想问一下,我可以在每个线程中都调用一次WSAStartup()和WSACleanup()吗?每个线程启动通讯的时间是一样的。
另外我想问下,如果我调用了WSAStartup()而没有调用WSACleanup()会怎样,系统会强制释放吗?多长时间后会强制释放?
谢谢。
因为的我的程序希望一直运行下去,除非关机。所以我在main()函数中调用了一次WSAStartup()后就没有调用WSACleanup(),但是我的程序在运行了54个小时之后所有socket通讯的线程都停了,刚好54个小时,不知道什么原因。
如果我没有调用WSACleanup(),一定时间之后系统不会强制回收资源吧?
“每个线程定时进行UDP或者TCP通讯”——如果你每次进行UDP或者TCP通讯都要创建一个套接字的话,用完之后只要用close()释放就可以了。
所有的线程都停了是什么意思?线程正常结束?错误退出?还是阻塞在某个地方?
阻塞在某个地方了,但是阻塞的时间很随机,有时候一天,有时候两天,现场的电脑没有编译环境,不能确定阻塞在哪里了,所以我也不知道具体是哪里引起的。
追答如果线程没有退出的话,有可能是阻塞或者是死循环。看看都用了那些阻塞函数,代码执行异常的情况,有没有代码可能会死循环,建议向这个方向分析。