a implementation of template class that is used for create event-driven task thread.

Committer:
mzta
Date:
Wed May 20 08:11:04 2015 +0000
Revision:
0:1f4516e81c1b
Child:
1:7d11951c1fc0
initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mzta 0:1f4516e81c1b 1 #ifndef ACTOR_H
mzta 0:1f4516e81c1b 2 #define ACTOR_H
mzta 0:1f4516e81c1b 3
mzta 0:1f4516e81c1b 4 #include <cstdarg>
mzta 0:1f4516e81c1b 5 #include <map>
mzta 0:1f4516e81c1b 6 #include "mbed.h"
mzta 0:1f4516e81c1b 7 #include "rtos.h"
mzta 0:1f4516e81c1b 8
mzta 0:1f4516e81c1b 9 #define MAX_MAIL_NUM 255
mzta 0:1f4516e81c1b 10 #define STACK_SIZE 1024 * 4
mzta 0:1f4516e81c1b 11 #define START_THREAD -1
mzta 0:1f4516e81c1b 12
mzta 0:1f4516e81c1b 13 typedef void (*Routine)(void const *argument);
mzta 0:1f4516e81c1b 14 typedef uint32_t MessageID;
mzta 0:1f4516e81c1b 15
mzta 0:1f4516e81c1b 16 struct MailPacket {
mzta 0:1f4516e81c1b 17 uint32_t messageId;
mzta 0:1f4516e81c1b 18 void *packet;
mzta 0:1f4516e81c1b 19 };
mzta 0:1f4516e81c1b 20
mzta 0:1f4516e81c1b 21 typedef Mail<MailPacket, MAX_MAIL_NUM> MailBox;
mzta 0:1f4516e81c1b 22 typedef std::map<MessageID, void(*)(void *)> JobList;
mzta 0:1f4516e81c1b 23
mzta 0:1f4516e81c1b 24 class Actor
mzta 0:1f4516e81c1b 25 {
mzta 0:1f4516e81c1b 26 public:
mzta 0:1f4516e81c1b 27 Actor();
mzta 0:1f4516e81c1b 28 virtual ~Actor();
mzta 0:1f4516e81c1b 29
mzta 0:1f4516e81c1b 30 virtual void subscribe(MessageID msg, void(*task)(void *));
mzta 0:1f4516e81c1b 31
mzta 0:1f4516e81c1b 32 virtual void unsubscribe(MessageID msg);
mzta 0:1f4516e81c1b 33
mzta 0:1f4516e81c1b 34 static void sendMail(Actor *dest, MessageID msg, void *pkt);
mzta 0:1f4516e81c1b 35
mzta 0:1f4516e81c1b 36 protected:
mzta 0:1f4516e81c1b 37 virtual void threadMain();
mzta 0:1f4516e81c1b 38
mzta 0:1f4516e81c1b 39 static void threadKicker(void const *p);
mzta 0:1f4516e81c1b 40
mzta 0:1f4516e81c1b 41 Thread thread;
mzta 0:1f4516e81c1b 42 MailBox mbox;
mzta 0:1f4516e81c1b 43 JobList joblist;
mzta 0:1f4516e81c1b 44 };
mzta 0:1f4516e81c1b 45
mzta 0:1f4516e81c1b 46 #endif