Multithreading 当我在Winsock connect函数中强制终止线程时会发生什么?

Multithreading 当我在Winsock connect函数中强制终止线程时会发生什么?,multithreading,delphi,winapi,winsock,terminate,Multithreading,Delphi,Winapi,Winsock,Terminate,在Winsock函数运行期间使用时会发生什么情况? 我需要立即关闭当前连接到套接字的线程,但我不知道网络适配器会发生什么情况 不幸的是,该函数没有超时参数,默认的系统超时值太高。那么,是否存在中断此API函数的风险 我使用Delphi标记只是因为我在用Delphi编写我的应用程序,但它更多的是Winsock和Windows API问题 谢谢通过调用TerminateThread,您会造成巨大的内存和资源泄漏。如果您在程序退出之前执行此操作,则可能没有问题(尽管这并不好…)。但是,如果在程序执行过

在Winsock函数运行期间使用时会发生什么情况? 我需要立即关闭当前连接到套接字的线程,但我不知道网络适配器会发生什么情况

不幸的是,该函数没有超时参数,默认的系统超时值太高。那么,是否存在中断此API函数的风险

我使用Delphi标记只是因为我在用Delphi编写我的应用程序,但它更多的是Winsock和Windows API问题


谢谢

通过调用TerminateThread,您会造成巨大的内存和资源泄漏。如果您在程序退出之前执行此操作,则可能没有问题(尽管这并不好…)。但是,如果在程序执行过程中多次这样做,程序最终会崩溃——没有内存。网络适配器及其驱动程序将正常,它们受到良好的保护,不受有缺陷的用户模式程序的影响

在重叠调用中使用ConnectEx()?您可以在hEvent中使用事件对象(例如TEvent)并使用WaitForMultipleObjects()等待该事件和某个终结器事件,或者使用完成例程并在循环中使用WaitForSingleObjectEx()等待终结器,从而忽略WSA_输出_挂起和IO_完成作为结果

我想在这种情况下,使用WaitForMultipleObjects()等待会更容易

Rgds,
Martin

中止
connect()
调用的唯一方法是从另一个线程上下文关闭套接字。否则,像Martin说的那样,对重叠I/O使用
ConnectEx()

非常感谢;这正是我想要的(即使问题的措辞略有不同)。实际上,从另一个线程上下文调用函数可以中断进程。这值得我投许多赞成票,也值得我方接受。再次感谢!!