我目前有两个线程,一个生产者和一个消费者。生产者是一种静态方法,将数据插入到 Deque 类型的静态容器中,并通过boost::condition_variable
在 deque 对象中插入对象来通知消费者。然后消费者从 Deque 类型中读取数据并将其从容器中移除。两个线程使用boost::condition_variable
这是正在发生的事情的摘要。这是消费者和生产者的代码
//Static Method : This is the producer. Different classes add data to the container using this method
void C::Add_Data(obj a)
{
try
{
int a = MyContainer.size();
UpdateTextBoxA("Current Size is " + a);
UpdateTextBoxB("Running");
MyContainer.push_back(a);
condition_consumer.notify_one(); //This condition is static member
UpdateTextBoxB("Stopped");
}
catch (std::exception& e)
{
std::string err = e.what();
}
}//end method
//Consumer Method - Runs in a separate independent thread
void C::Read_Data()
{
while(true)
{
boost::mutex::scoped_lock lock(mutex_c);
while(MyContainer.size()!=0)
{
try
{
obj a = MyContainer.front();
....
....
....
MyContainer.pop_front();
}
catch (std::exception& e)
{
std::string err = e.what();
}
}
condition_consumer.wait(lock);
}
}//end method
现在插入到Deque
类型对象中的对象非常快,大约每秒 500 个对象。运行时我注意到 TextBoxB 始终处于“停止”状态,而我相信它应该在“运行”和“停止”之间切换。加上很慢。关于我可能没有考虑过并且可能做错了什么的任何建议?