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

Actor.h

Committer:
mzta
Date:
2015-05-20
Revision:
0:1f4516e81c1b
Child:
1:7d11951c1fc0

File content as of revision 0:1f4516e81c1b:

#ifndef ACTOR_H
#define ACTOR_H

#include <cstdarg>
#include <map>
#include "mbed.h"
#include "rtos.h"

#define MAX_MAIL_NUM    255
#define STACK_SIZE      1024 * 4
#define START_THREAD    -1

typedef void (*Routine)(void const *argument);
typedef uint32_t MessageID;

struct MailPacket {
    uint32_t messageId;
    void *packet;
};

typedef Mail<MailPacket, MAX_MAIL_NUM> MailBox;
typedef std::map<MessageID, void(*)(void *)> JobList;

class Actor
{
public:
    Actor();
    virtual ~Actor();

    virtual void subscribe(MessageID msg, void(*task)(void *));

    virtual void unsubscribe(MessageID msg);

    static void sendMail(Actor *dest, MessageID msg, void *pkt);

protected:
    virtual void threadMain();

    static void threadKicker(void const *p);

    Thread thread;
    MailBox mbox;
    JobList joblist;
};

#endif