rec*_*ion 2 c++ multithreading
在我的代码中,主循环如下所示
while ( (data = foo()) != NULL ) {
// do processing on data here
}
Run Code Online (Sandbox Code Playgroud)
其中foo()用C语言编写(它使用libavcodec获取视频流中的下一帧,如果你很好奇的话).
我的问题是,由于原因太复杂而无法进入,有时会foo()挂起,这会停止整个程序.我想要做的是检测这种情况,即foo()花费超过N秒,如果是这样,采取行动.
我想创建一个单独的线程来运行foo()来实现这一点我之前没有做过任何多线程编程.这就是我想要做的事情:
foo()foo()完成后,子线程返回foo()foo()不返回null,重复步骤1-4 ,这表示结束.我该怎么做呢?我需要三个线程(主线程,运行foo()和时序)吗?
谢谢!
这非常难以做好.问题是foo挂起时你要做的事情.几乎你唯一可以做的就是中止程序(不仅仅是线程)并重新开始 - 杀死线程并尝试重新启动它可能会起作用,但它充其量是危险的.当您终止进程时,操作系统将清理资源,但是当您终止单个线程时则不会.基本上不可能弄清楚哪些资源专属于该线程,以及可能与该进程中的其他线程共享的内容.
在这种情况下,也许你可以将易于悬挂的部分移动到一个单独的进程,并在/如果它挂起时杀死/重启该进程?然后,您将通过一些正常形式的IPC(例如,管道)将数据发送到父进程.在这种情况下,您可以在父(处理器和看门狗)中有两个线程,或者(如果可用)您可以在超时的情况下执行某种异步读取,并在/如果读取超时(仅使用一个)时终止子进程线).