将多个可执行文件转换为单个应用程序

时间:2009-08-13 22:00:26

标签: c++ multithreading boost qt4 openmp

我有三个共享大量源代码和数据的遗留应用程序。用户可以在任何时间执行这些应用程序中的每一个的多个实例,例如,一次可以激活十几个混合应用程序执行。这些应用程序当前通过共享内存和消息传递技术进行通信,以便它们可以维护常见的光标定位等。应用程序主要使用C ++编写,使用Qt并总共运行大约500万行代码。只有部分现有代码是线程安全的。

我想将这三个可执行文件合并为一个可执行文件,并使用多线程功能允许三个功能分支中的每一个的多个实例同时执行。有人建议我研究一下Boost提供的一些功能,例如:共享指针,并使用OpenMP来协调多个线程的整体执行。

任何关于如何继续的评论都将受到赞赏,特别是关于解决这种重构问题的最佳方法的参考。

3 个答案:

答案 0 :(得分:3)

我建议您首先设计所需的解决方案(首先假设要求相同),然后根据第三方功能可能引入的要求,从现有代码库构建分阶段迁移路径。

重构应该是一次一小步 - 但要知道你要去哪里。

Working Effectively with Legacy Code (Robert C. Martin Series) 将是我建议的好读物。

相信我(我有T恤)除非你知道如何证明功能,否则不要尝试重构 - 自动验证测试将成为你的救星。

答案 1 :(得分:2)

我认为没有人能够给你一个明智的答案。有太多事情需要考虑。只有仔细分析所涉及的过程和背后的代码,任何人(包括您)都能够为您提供项目路径。

那就是说,你应该考虑一些事情。

  1. 您的应用程序以及它们似乎相互通信的方式在我看来已经是一个非常合理的解决方案。就是这样,特别是因为你有500万行代码要处理,如果你选择重构你当前的系统。这是一种强大的威慑力量。如果需要提供线程支持以优化当前的应用程序消息传递,我建议您考虑将MT引入共享内存和消息传递例程的可能性,而不是合并应用程序。

  2. 合并您的应用程序的行为乍一看可能是粘贴当前代码并删除负责内存共享和消息传递的当前例程的“简单”行为,将其替换为正常的函数调用对象。我的直觉告诉我它不会那么简单。您必须考虑到几乎可以肯定您当前的主干代码是为当前的消息传递解决方案而设计的。考虑到你的当前抽象被考虑在内。您几乎肯定会发现您还需要对现有的骨干代码进行重大更改。再次在这里你会发现500万行的墙是个大问题。因为更改会在整个系统中快速传播,并为您提供500万行代码来处理,而且上帝知道有多少新错误。

  3. 我建议1以上。但是,您可能需要出于某种原因来整合您的应用程序。既然如此,在您尝试之前我仍然会提出其他建议.2。创建一个界面应用程序,负责启动,显示和维护当前的3个应用程序。如果您这样做,您的用户将不会更好。您仍然可以将1应用于当前系统,并在通用界面下加入您的应用程序,尽管它们实际上是独立的实体。

答案 2 :(得分:0)

“......约有500万行代码......”嗯......如果不了解你的系统就很难肯定,但由于它是一个“遗留”系统,你可能会获得很多删除代码重复。查看SimianCPD

500万行很多代码。当然,你可能需要它,但我的猜测是你没有。

你肯定需要一个很好的理由将类似代码的更改更改为多线程,尤其是在C ++中。在没有完全清理它的情况下完成它是一种灾难。