【问题标题】:How to encapsulate a thread?如何封装一个线程?
【发布时间】:2012-05-06 02:47:33
【问题描述】:

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

管理器由一个应用程序组成,我的问题如下:

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

【问题讨论】:

  • 为什么一开始就允许未处理的异常?
  • 当然我不想允许它,但是在一个大型项目中,作为具有多个数据库连接、实例和外部文件的游戏服务器,可能会发生错误。如果我在更新中犯了一个错误,并且在测试期间或类似情况下错过了它,我希望至少不是所有服务器都立即崩溃。
  • 您的问题确实是:“我如何编写代码来理智地处理我没有编写代码来理智地处理的情况?”当您意识到这是问题所在时,答案应该是显而易见的。

标签: c++ multithreading boost crash


【解决方案1】:

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

有什么方法可以将您的应用程序拆分为多个通信进程?这样,如果其中一个崩溃,其余的都不受影响。

【讨论】:

  • 完全同意。我们应该始终从程序必须正常工作的前提开始,不管是否多线程。我最近在旨在“保持运转”的库代码中看到了太多这种catch (...)
  • 是的,我当然不打算让它发生,但这将是一个大项目,它可以而且很可能会发生。在这种情况下,我会找到并修复它。我会先等待其他一些答案。如果有一种方法可以在一个应用程序中实现它。如果没有,我将没有机会,只能听从您的建议并创建多个流程。
  • 这不是线程做的事情。线程几乎共享所有内容。如果一个线程乱跑,则进程上下文是 toast。线程必须完全合作和完全信任。
  • 大卫·施瓦茨是对的。以浏览器(firefox、chrome)为例,它们将 flash 插件作为单独的进程运行,以防止在插件崩溃时整个浏览器崩溃。
  • 好的,谢谢,我不知道然后我会尝试找到一种方法来创建多个进程。
猜你喜欢
  • 2018-07-26
  • 2014-06-19
  • 2011-02-11
  • 2016-08-14
  • 2011-12-07
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多