我有 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/