c ++, не могли бы вы помочь мне с моей проблемой 'MessageSender class'? (Каждый метод MessageSender должен работать для независимых потоков) - PullRequest
0 голосов
/ 01 апреля 2020
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.

Есть ли хорошее решение? или моё требование невозможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...