c / c ++相当新。我正在为我的RaPi编写一些代码,在.net中这对我来说很容易,但是我在c ++中对设计有所帮助。
简而言之,我应该何时将main与另一个cpp文件的代码分解为单独的程序?
目前我有两个程序通过socket fifo相互通信。
PiSocket - 所有互联网通讯。 Put,Get和SignalR连接。与从MainPi发送和接收数据一起。
MainPi - 使用PiSocket发送和接收数据,处理数据库并执行系统命令(例如拉/发送gpio数据)。
我不确定: 基本上有4段代码。主循环,互联网连接,数据库调用和系统命令。何时/应如何突破?我怀疑所有组合的代码将超过20k行,但它必须是相当实时的通信(在几秒钟内)。
使用套接字进行通信似乎很麻烦,所以我认为每个部分应该是它自己的cpp文件。同时,它是PiSocket.cpp引用MainPi的循环冗余,反之亦然?或者我应该使用自己的线程从main中的无限循环调用每个部分?通过网络/ PiSocket也会有代码更新,这可能很重要,我怀疑。
当然这很简单,但我的搜索没有透露太多,真的不想在以后重新设计。
提前完成。
答案 0 :(得分:0)
您将两个不同的问题混为一谈:
.cpp文件意味着单独的C ++翻译单元,这会产生一个单独的对象/库文件,该文件可能会或可能不会链接到已构建的其他对象中
.cpp文件及其自己的main()
可以生成单独的可执行程序,这些程序在自己的进程中运行
当您有单独的进程时,您只需要IPC机制,例如套接字/ FIFO。您的问题描述中没有任何内容表明这对您有用。
如果我是你,我会把“piSocket.cpp”写成一个互联网连接库:它可以使用线程在后台进行通信/处理,而来自“main.cpp”代码的调用可以规定在可报告事件发生时调用的函数(例如,数据从Internet到达)。您还需要一个“piSocket.h”文件 - 通常使用typedef,常量,枚举,函数声明,类定义,模板和/或与“piSocket”通信功能相关联的内联函数。 piSocket.cpp和mainPi.cpp都应包含该标题。
详细信息因编译器而异,但基本构建过程可能类似于:
# compile piSocket.cpp into piSocket.o
g++ -c piSocket.cpp
# compile mainPi.cpp and link in piSocket.o to form myApp executable
g++ -o myApp mainPi.cpp piSocket.o
总而言之,我会说这会让你痛苦。一个很好的选择是将所有内容保存在一个文件中,并充分了解该语言以使功能首先运行,然后担心将文件的内容分成两部分。如果你无法使这些功能发挥作用,那就更好地理解更好的“物理设计”(分离成文件)。