【问题标题】:General question about parallel threading in C++关于 C++ 中并行线程的一般问题
【发布时间】:2011-10-02 22:38:10
【问题描述】:

我以前没有在我的程序中使用过线程。但是我在使用这个 3rd 方应用程序时遇到了问题。

这是一个异地备份解决方案,它有一个服务器和许多客户端。我们有一个管理控制台来管理所有客户端,这就是问题所在。

如果其中一个客户端应用程序被卡住,或者运行时出现故障,管理控制台将永远等待得到响应并且不显示任何内容。

$for(client= client1; client < last_client; client++){ if (getOServConnection(client, &socHandler)!=NULL) { .. } }

我想要两个解决方案。我想知道是否有,我可以为函数 getOServConnection 设置超时,以便在 X 秒内得到响应。

而且,我想知道如何为所有客户端并行调用此函数,以便在 X 秒内获得所有客户端的响应。

getOServConnection 包含一个 WSAConnect 调用,我不想在套接字上使用任何选项,因为它被其他模块使用,它会严重影响应用程序。

【问题讨论】:

    标签: multithreading visual-c++ timeout parallel-processing boost-thread


    【解决方案1】:

    首先.. 如果您将挂起的调用移动到单独的线程中,您可以使用主线程来启动计时器并等待超时。如果您使用 Visual C++ 并且在 Win32 中,则可以使用 (rather old) MFC based timer。一旦这个计时器到期,它将启动一个函数调用OnTimer。此计时器不会影响您的应用程序的主线程,因为它在不同的基于系统的线程中工作。

    其次.. 如果您需要使用该连接启动任意数量的线程,您应该开始考虑使用的设计模式。您可以使用固定数量的线程,在这种情况下您可能需要使用object pool。或者,如果线程数(相对)无限,您可能需要使用factory method

    【讨论】:

    • 是的,我决定使用线程,我想我将使用 CreateThread() 启动线程并将其放入 for 循环并执行 WaitforMultipleObjects 以获取状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多