我在实施以下方案时遇到问题。我的问题陈述是这样的:
Thanx Guys ...经过一些评论将相机和图像处理工作放在一个线程中后,我想知道另一个问题..这是......
我在每个进程(Camera Process and Image Processing job)和movetoThread命令中使用QObject,使其在特定的线程中运行。
有关实施和信号/插槽设计的任何见解都会有所帮助..
答案 0 :(得分:2)
您正在寻找的是一种简单的“发布/订阅”模式。在这种类型的“分发”模式中,当客户端不处于接收图像的状态时,所有消息都被发送并且被客户端删除
我会在您的应用程序中实现以下内容:
像你一样拥有所有单独的线程(Camera,Processing,Gui)。
通过peridocally(通过qTimer信号可能,如果你想简化)摄像头,捕获图像并通过信号/插槽连接发送到processingThread。
当processingThread处理图像时,它设置一个状态标志(可以只是一个成员变量,一个bool可以工作)来表示它当前正在处理一个图像。处理完图像后,设置标记表示您没有处理。
在ProcessingThreads插槽中,它接收来自CameraThread的图像,您将首先检查您当前是否正在处理图像。如果你是,你不对信号数据做任何事情,你只需返回。如果您不处理图像,则将存储信号数据并调用过程函数。
使这项工作的诀窍是在处理函数的ProcessingThreads主循环中包含此function call(QCoreApplication::processEvents()
)。这将允许您的ProcessingThread处理它所做的任何信号,而它正在做一些有用的事情。
状态变量检查将允许您“丢弃”在处理当前的图像时发送给您的所有新图像,而不是将它们排队。