Я пишу программу, которая использует два разных потока данных для выполнения определенных вычислений.В настоящее время мой код настроен так:
//pseudo c++
class Calculator
{
//Stream is a class which contains a queue which has new messages added to it
Stream a, b;
bool BothQueuesHaveItems() { return !a.IsEmpty() && !b.IsEmpty(); }
void PerformCalc() { /*Do domething with the first items in a and b*/ }
};
unsigned ThreadFunction(void *stop_event)
{
Calculator calculator;
while(WaitForSingleObject(stop_event) == WAIT_OBJECT_0)
{
if(calculator.BothQueuesHaveItems())
{
calculator.PerformCalc();
}
Sleep(5);
}
}
int main()
{
Event stop_event = CreateEvent(...);
CreateThread(ThreadFunction, &stop_event, ...);
//wait for user enter command to stop processing
SetEvent(stop_event);
}
Это не очень хороший дизайн (особенно непрерывный цикл в ThreadFunction, независимо от того, есть ли новые элементы в очередях или нет), ноЯ не совсем уверен, как это улучшить.Мы ценим любые предложения.