如果处理没有响应,我怎么能抛出异常

时间:2016-04-21 02:35:33

标签: c++ multithreading timeout

我有c ++ clr项目。 它使用API​​公司(如solidworks'api)。

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

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

尝试登录其他服务器应用程序。 但是,如果该应用程序不起作用,没有任何响应。我无法推进下一个来源。 Debuger无限期地留下“m_pc3dCore->登录(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->登录(m_CdmUser,m_CdmUserPass,m_CdmServer); 因为该服务器现在正在工作,所以返回True。结果我不可能发生问题。这就是我制作无限循环方法的原因。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果对Login()的调用本身不会返回超时,那么您可能需要实施某种轮询。

Here是一篇关于投票,回调和事件的文章。 here是一篇关于某些新语言功能的文章,可以帮助您实现目标。希望这至少可以指出你正确的方向。

答案 1 :(得分:0)

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

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

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

signal(SIGALRM, handler);

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