2013-09-25 2 views
0

Я должен спроектировать обработчик потока в posix таким образом, чтобы один поток был предназначен для обработки функции и события. Для событий я создам очередь и поток и выталкиваю событие в очередь. Но как я буду использовать тот же поток для обработки функций. Должен ли я использовать одну и ту же очередь для функции? Если да, то как мне передать функцию?Повторное использование потока для нескольких функций и событий в C++ (в основном, POSIX-поток)

Пожалуйста, помогите или исправьте, если я задаю вопрос неправильно.

+2

"поток для обработки функции"? Пожалуйста, объясните подробно или на примере. – HAL

+1

Только ключевые слова для онлайн-поиска: Как насчет указателей функций? Как насчет шаблона команды? – knivil

+0

Допустим, у меня есть 1 событие DOOR_OPEN и метод start_exam(). Таким образом, объект, который выполняет некоторую работу над событием и метод start_exam, должен идти в одном потоке. Для случая я не вижу здесь никаких трудностей, но как метод start_exam будет передан в тот же поток? – Chris

ответ

0

Я бы оставил еще один комментарий, но мне нужно пространство ...

не действует C, но вы получите идею:

struct task //could use an union 
{ 
    int type; //0 if task is event, 1 for "function", etc...consider using enums 
    int ev; 
    std::function<void()>> func; 
}; 
std::queue<task> pending; 

.... в вашей теме:

auto t = pending.front(); 
pending.pop(); 
if(t.type==0)//we have an event to process 
{ 
    proc_event(t); 
} 
else if(t.type==1)//run a function 
{ 
    t.func(); 
} 

удачи при обработке исключений и убедитесь, что одна из ваших функций не убивает нить или блокирует ее слишком долго

Смежные вопросы