Ben*_*aub 18
你可以产生一个boost::thread来调用API:
boost::thread api_caller(::api_function, arg1, arg2);
if (api_caller.timed_join(boost::posix_time::milliseconds(500)))
{
// API call returned within 500ms
}
else
{
// API call timed out
}
Run Code Online (Sandbox Code Playgroud)
但是,Boost不允许你杀死工作线程.在这个例子中,它只是孤儿.
你必须要小心API调用的作用,因为它可能永远不会释放它所获得的资源.
An̲*_*rew 15
我认为实现这一目标的唯一安全方法是生成一个单独的沙箱进程,该进程将库函数作为应用程序的代理调用.您需要在应用程序和代理之间实现某种类型的IPC.在读取IPC回复时实现超时非常简单.如果读取因超时而失败,则可以安全地终止代理,而不会危及应用程序的运行状况.
你所说的通常被称为"看门狗"系统.监视程序通常是第二个线程,它检查所有其他线程的状态.看门狗通常设置为定期运行.如果没有收到来自其他线程的响应,则监视程序可以通知用户,或者如果可以安全地(取决于您的应用程序)可以杀死有问题的线程.