c++ - 如果处理没有响应,我该如何抛出异常

标签 c++ multithreading timeout

我有 C++ clr 项目。 它使用公司的 API(如 solidworks 的 api)。

所以..我的问题发生在这里。

BOOL rc = m_pc3dCore->Login(m_CdmUser, m_CdmUserPass, m_CdmServer);

尝试登录其他服务器应用程序。 但如果该应用程序不工作,则不会有任何响应。我无法推进下一个来源。调试器无限地保持“m_pc3dCore->Login(m_CdmUser, m_CdmUserPass, m_CdmServer);”

所以,我确实将其包装起来以使用 try{} catch(...){} 但没有改变任何东西。

我想抛出异常,如果它在那里停留 4 秒。 你能教我如何解决这个问题或搜索关键字吗?

---我的看法 我以为我使用 System::Thread 接口(interface)解决了这个问题。 所以我试着做了一个方法。该方法会无限循环。

void threadFuncA()
{
    while(true){
    }
}

并制作线程

Thread^ newThread = gcnew Thread(gcnew ThreadStart(threadFuncA));
newThread->Start();
newThread->Join();

程序在调用 newThread->Join() 后开始无限循环; 是解决方案退出循环吗?

  • 我无法尝试使用 m_pc3dCore->Login(m_CdmUser, m_CdmUserPass, m_CdmServer); 因为该服务器现在正在工作,所以返回 True。结果我不会发生问题。这就是我制作无限循环方法的原因。

谢谢!

最佳答案

在 UNIX 系统上,您可以通过信号中断阻塞的系统调用。 尝试:

alarm(4);
BOOL rc = m_pc3dCore->Login(m_CdmUser, m_CdmUserPass, m_CdmServer);
alarm(0);

4 秒后阻塞情况被中断,程序继续进行。 首先安装一个自己编写的处理程序(int)来诊断这种情况:

signal(SIGALRM, handler);

或在现代 UNIX 上使用 sigaction()。

关于c++ - 如果处理没有响应,我该如何抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758589/

相关文章:

c++ - 在 C++ 中为 OpenSSL 中的 SSL_read 设置连接超时

linux - Odoo超时杀死cron

c++ - 为什么在调试过程中有时窗口标题黑色和按钮无框

c# - 异步添加内容(线程+ajax)

c# - 简单的多线程问题

multithreading - 借用检查器可以知道 Arc 何时为 "released"吗?可以暂时授予“静态生命周期”吗?

android - Firebase 身份验证超时

android - 在 Android 中读取共享首选项期间,Qt 上的 JNI 出现 NoSuchMethodError

C++查找子字符串中字符串的最后一次出现

c++ - C++ 中的递归 Typedef