我以前没有在程序中使用过线程。但是我在第三方应用程序中遇到了问题。
这是一个异地备份解决方案,它有一个服务器和许多客户端。我们有一个管理控制台来管理所有客户端,这是有问题的地方。
如果其中一个客户端应用程序卡住或运行状况不佳,管理控制台将永远等待获取响应并且不显示任何内容。
$for(client= client1; client < last_client; client++){
if (getOServConnection(client, &socHandler)!=NULL) { .. }
}
我想要两个解决方案。我想知道无论如何,我可以为函数getOServConnection设置超时,以便在X秒内得到响应。
而且,我想知道如何为所有客户端并行调用此函数,以便在X秒内从所有客户端获得响应。
getOServConnection包含一个WSAConnect调用,我不想在套接字上使用任何选项,因为它被其他模块使用,它会严重影响应用程序。
答案 0 :(得分:1)
首先..如果你将挂起的调用移动到一个单独的线程中,你可以使用主线程启动一个等待超时的定时器。如果您使用的是Visual C ++,而且如果您使用的是Win32,则可以使用(rather old) MFC based timer。一旦此计时器到期,它将启动函数调用OnTimer
。此计时器不会影响应用程序的主线程,因为它在不同的基于系统的线程中工作。
第二..如果你需要使用该连接启动任意数量的线程,你应该开始考虑使用它的设计模式。您可以使用固定数量的线程,在这种情况下,您可能需要使用object pool。或者如果线程数量(相对)无限制,您可能需要使用factory method