我计划将一个覆盆子pi连接到一个64x64的led矩阵,并编写一个用c ++编写的一种启动加载器软件。我希望该软件能够与我制作的自定义游戏即插即用。也就是说,我将游戏的所有已编译代码放入目录中,引导加载程序将识别它们,并使用fork()
和execvp()
调用运行所选游戏。我希望加载器有不同的状态,例如:start_state
,game_selection_state
,preview_state
,idle_state
等等。每个州都会根据输入设备的输入或空闲时间做自己的事情和从州到州的过渡。
现在我不知道建立这个架构的最佳方式。我甚至不确定状态机是处理此问题的最佳方法。但到目前为止,我提出的是我会有两个线程。
主题1: 处理各州的所有功能和理智。这将包括每个州的启动,停止和数据。它还包括从州到州过渡的函数调用。
主题2: 从输入设备(游戏控制器)解析输入并确保转换有效。然后使用线程1的函数调用相应地改变状态。我计划使用消息队列发送任何未保留用于转换到当前状态的输入。 (例如A& B表示转换,但Y被按下并将被发送到当前状态)这样,状态可以通过这些按钮按下它们想做的任何事情。
现在这有点模糊,当用户选择游戏时,将在线程内进行fork()
调用并且我已经读过这会导致问题。如果我这样做,我需要一种方法来终止或暂停线程2,直到execvp()
呼叫结束。
现在我想知道的是这是实现这样的有效或最佳方式。