class IMessage{
public:
virtual void send(const MessageSender&) = 0;
};
class ATypeData : public IMessage
{
public:
void send(const MessageSender& s) ;
};
class BTypeData : public IMessage {
public:
void send(const MessageSender& s) ;
};
class CTypeData : public IMessage {
public:
void send(const MessageSender& s) ;
};
class MessageSender
{
public:
sendMessage(IMessage& data) { data.send(*this); }
sendATypeMessage(ATypeData&) const { mutex msgALock; do something A; }
sendBTypeMessage(BTypeData&) const { mutex msgBLock; do something B; }
sendCTypeMessage(CTypeData&) const { mutex msgCLock; do something C; }
...(it can be added other type later)
}
...
threadA() { while(1) { sendATypeMessage(ATypeData); }
threadB() { while(1) { sendBTypeMessage(BTypeData); }
threadC() { while(1) { sendCTypeMessage(CTypeData); }
...
main() { start threadA(); start threadB(); start threadC() ... }
В этом случае, если 'сделать что-то A' не является конечным sh,
sendBTypeMessage, sendCTypeMessage задерживаются, пока завершается работа "сделать что-то A".
Я хочу изменить его так, чтобы sendXTypeMessage мог обрабатывать независимо от внутреннего поведения sendATypeMessage.
Есть ли хорошее решение? или моё требование невозможно?