VC++ socket多线程编程问题
现在在写一个多线程程序,每个线程定时进行UDP或者TCP通讯,比如5分钟。我想问一下,我可以在每个线程中都调用一次WSAStartup()和WSACleanup()吗?每...
现在在写一个多线程程序,每个线程定时进行UDP或者TCP通讯,比如5分钟。我想问一下,我可以在每个线程中都调用一次WSAStartup()和WSACleanup()吗?每个线程启动通讯的时间是一样的。
另外我想问下,如果我调用了WSAStartup()而没有调用WSACleanup()会怎样,系统会强制释放吗?多长时间后会强制释放?
谢谢。 展开
另外我想问下,如果我调用了WSAStartup()而没有调用WSACleanup()会怎样,系统会强制释放吗?多长时间后会强制释放?
谢谢。 展开
1个回答
展开全部
WSAStartup()和WSACleanup()在主线程调用一次就行,一般在main函数调用。
不调用WSACleanup()在进程结束后系统会帮你回收资源。
建议还是调用WSACleanup(),写出程序看起来逻辑严谨。
不调用WSACleanup()在进程结束后系统会帮你回收资源。
建议还是调用WSACleanup(),写出程序看起来逻辑严谨。
更多追问追答
追问
因为的我的程序希望一直运行下去,除非关机。所以我在main()函数中调用了一次WSAStartup()后就没有调用WSACleanup(),但是我的程序在运行了54个小时之后所有socket通讯的线程都停了,刚好54个小时,不知道什么原因。
如果我没有调用WSACleanup(),一定时间之后系统不会强制回收资源吧?
追答
“每个线程定时进行UDP或者TCP通讯”——如果你每次进行UDP或者TCP通讯都要创建一个套接字的话,用完之后只要用close()释放就可以了。
所有的线程都停了是什么意思?线程正常结束?错误退出?还是阻塞在某个地方?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询