a implementation of template class that is used for create event-driven task thread.
Actor.h@0:1f4516e81c1b, 2015-05-20 (annotated)
- 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?
User | Revision | Line number | New 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 |