C++ 在中断或连接后重用Boost线程(来自线程池)

C++ 在中断或连接后重用Boost线程(来自线程池),c++,multithreading,boost,boost-thread,producer-consumer,C++,Multithreading,Boost,Boost Thread,Producer Consumer,目前,我正在使用生产者-消费者模型作为实时图形应用程序的渲染部分。消费者将不断地在我们的队列中寻找数据(无限循环);然而,我担心这可能会导致我的模拟与主回路不同步。我认为这是快生产者慢消费者的问题——再加上模拟被限制在一定时间内的事实 问题-保持这一切平衡的最佳方法是什么,以确保消费者有足够的时间完成,并且在我们完成渲染当前帧之前模拟不会移动到下一帧(或者至少能够检测到这一点并跳过渲染下一帧-或者中断正在渲染的当前帧)我目前只是在每个使用者完成后中断并加入 第二个问题:如果你看下面的代码,你会发

目前,我正在使用生产者-消费者模型作为实时图形应用程序的渲染部分。消费者将不断地在我们的队列中寻找数据(无限循环);然而,我担心这可能会导致我的模拟与主回路不同步。我认为这是快生产者慢消费者的问题——再加上模拟被限制在一定时间内的事实

问题-保持这一切平衡的最佳方法是什么,以确保消费者有足够的时间完成,并且在我们完成渲染当前帧之前模拟不会移动到下一帧(或者至少能够检测到这一点并跳过渲染下一帧-或者中断正在渲染的当前帧)我目前只是在每个使用者完成后中断并加入

第二个问题:如果你看下面的代码,你会发现我在向队列中添加渲染作业后,正在调用中断和连接-这允许线程在所有需要的时间内完成其操作,并在完成时响应中断。在中断后,我如何在线程池中重用线程l和join\u都被调用?(即,如果我再次调用drawNextFrame)

制作人是执行主线的一部分(我认为这不会影响任何事情)

如果您需要查看消费者类别,请参见以下内容:

pseudo code:

RenderConsumer::operator () ()
    while(true)
        try to dequeue from queue
        //digest any packet we get
        for each ( pixel in packet )
            computePrettyStuff()
        //we are now done with packet that we got
        this_thread::interruption_point();
我试着让这变得简单和容易理解,谢谢你的时间。我会在每次渲染后计算队列中的数量。如果数量太多,那么

a、 转储队列

b、 将布尔变量设置为false 该变量将在线程之间共享,当生产者发现该变量为false时,它开始等待条件变量。然后,当队列再次下降到可接受的水平时,消费者通知生产者

#2.可能无法使用join_all,因为join_all的后条件是

组中的每个线程都有 终止

根据参考资料

然而,使用屏障而不是全部连接是可能的,但是您必须找到一种方法向它们提供数据,这将不可避免地需要一些更多的共享变量

pseudo code:

RenderConsumer::operator () ()
    while(true)
        try to dequeue from queue
        //digest any packet we get
        for each ( pixel in packet )
            computePrettyStuff()
        //we are now done with packet that we got
        this_thread::interruption_point();