a implementation of template class that is used for create event-driven task thread.
Actor.cpp
- Committer:
- mzta
- Date:
- 2015-05-20
- Revision:
- 0:1f4516e81c1b
File content as of revision 0:1f4516e81c1b:
#include "Actor.h" Actor::Actor() : thread(&Actor::threadKicker, this, osPriorityNormal, STACK_SIZE) { thread.signal_set(START_THREAD); } Actor::~Actor() { } void Actor::threadMain() { printf("thread main\n"); osEvent event; while(true) { event = mbox.get(); if (event.status == osEventMail) { MailPacket *mail = (MailPacket*)event.value.p; if (joblist[mail->messageId] != NULL) { joblist[mail->messageId](mail->packet); } mbox.free(mail); } } } void Actor::subscribe(MessageID msg, void(*task)(void *)) { printf("subsc\n"); joblist[msg] = task; } void Actor::unsubscribe(MessageID msg) { printf("unsub\n"); joblist.erase(msg); } void Actor::sendMail(Actor *dest, MessageID msg, void *pkt) { printf("sendMail\n"); MailPacket *mail = dest->mbox.alloc(); mail->messageId = msg; mail->packet = pkt; dest->mbox.put(mail); } void Actor::threadKicker(void const *p) { printf("thread kicker\n"); Actor *instance = (Actor*)p; instance->threadMain(); }