我有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()之后编程启动无限循环; 它是解决方案退出循环吗?
谢谢!
答案 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()。