Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何封装线程?_C++_Multithreading_Boost_Crash - Fatal编程技术网

C++ 如何封装线程?

C++ 如何封装线程?,c++,multithreading,boost,crash,C++,Multithreading,Boost,Crash,我用boost::thread创建了一个带有一些线程的程序,因为它是一个管理器,可以为我的游戏项目启动和控制多个游戏服务器 经理由一份申请表组成,我的问题如下: 如何以这种方式封装线程,例如,如果它在空指针异常或类似情况下崩溃,则线程本身结束,而不是整个程序随后崩溃。首先,您应该绝对确保代码中不会出现空指针异常。这是一项强制性要求 您是否可以将应用程序拆分为多个通信进程?这样一来,如果其中一个崩溃,其余的就不会受到影响。为什么首先要允许未处理的异常?当然,我不想允许,但在一个大型项目中,作为一个

我用boost::thread创建了一个带有一些线程的程序,因为它是一个管理器,可以为我的游戏项目启动和控制多个游戏服务器

经理由一份申请表组成,我的问题如下:


如何以这种方式封装线程,例如,如果它在空指针异常或类似情况下崩溃,则线程本身结束,而不是整个程序随后崩溃。

首先,您应该绝对确保代码中不会出现空指针异常。这是一项强制性要求


您是否可以将应用程序拆分为多个通信进程?这样一来,如果其中一个崩溃,其余的就不会受到影响。

为什么首先要允许未处理的异常?当然,我不想允许,但在一个大型项目中,作为一个具有多个数据库连接、实例和外部文件的游戏服务器,可能会发生错误。如果我在一次更新中犯了一个错误,在测试期间或类似的时间错过了这个更新,我希望至少不是所有的服务器都会同时崩溃。你的问题是:“我如何编写代码来理智地处理我没有编写代码来理智地处理的情况?”当你意识到这是一个问题时,答案应该是显而易见的。完全同意。我们应该始终从程序必须正常工作的前提开始,不管多线程与否。我最近在库代码中看到了太多的这种捕获(…),目的是“让事情继续”是的,当然我不打算让它发生,但这将是一个大项目,它可以而且可能会发生。那样的话,我会找到并修复它。我会先等其他答案。如果有一种方法可以在一个应用程序中实现它。如果没有,我就没有机会,只能按照你的建议创建多个进程。这不是线程所能做的。线程几乎共享所有内容。如果一个线程运行异常,则进程上下文为toast。线程必须完全合作并完全信任。大卫·施瓦茨是对的。以浏览器(firefox、chrome)为例,它们将flash插件作为一个单独的进程运行,以防止插件崩溃时整个浏览器崩溃。好的,谢谢,我不知道,然后我将尝试找到一种创建多个进程的方法。