class A {....public: m_readdata(набор неких параметров); m_writedata(набор неких параметров)}
class A{...signals: sigReaddata(параметры) sigWritedata(параметры)....}
class A : public QThread{ Q_OBJECTpublic: m_read() { emit s_read(); } m_write() { emit s_write(); }signals: s_read(); s_write();protected: run();private: ClassB *B;}A : :run() { B = new ClassB; connect(this, s_read(), B, slotTransactionRead()); connect(this, s_write(), B, slotTransactionWrite()); .... exec();}....
C++ (Qt)class A : public QObject{ Q_OBJECTpublic: void m_read() void m_write() private: ClassB *B;}; void A::m_read(){ ThreadRead *th = new ThreadRead(); connect( th, s_read(), B, slotTransactionRead() ); th->start();}
class B : public QObject{Q_OBJECTpublic slots: void slotReadFromNode(int nodeAddress, int startDataAddress, int quantityData) { /* 1. Читает данные из удаленного узла 2. Сохраняет их в dataNode1 или dataNodeN в зависимости от адреса узла и т.п. */ } void slotWriteToNode(int nodeAddress, int startDataAddress, int quantityData , QByteArray &data) { /* выполняется отправка данных в удаленный узел и ожидание положительной квитанции от узла */ } void pollingNodes() { for (i=0;i<N;i++) { //выполняется опрос всех узлов slotReadFromNode(int nodeAddress, int startDataAddress, int quantityData, const QByteArray &data); } }public: QByteArray readReadyData(int nodeAddress, int startDataAddress, int quantityData) { QByteArray data; switch (nodeAddress) { case 1: data = dataNode1; //тут из массива data вырезаем кусок от startDataAddress до startDataAddress+quantityData break; case N: data = dataNodeN; //тут из массива data вырезаем кусок от startDataAddress до startDataAddress+quantityData break; } return data; } //массивы готовых данных QByteArray dataNode1; QByteArray dataNode2; ..................... QByteArray dataNodeN;/*где: nodeAddress - адрес запрашиваемого удаленного узла startDataAddress - стартовый адрес данных которые нужно или прочитать или записать quantityData - количество байт данных которые нужно записать или прочитать (по порядку) data - сами данные*/}class A : public QThread{Q_OBJECTsignals: void s_readData(int nodeAddress, int startDataAddress, int quantityData, QByteArray &data); void s_writeData(int nodeAddress, int startDataAddress, int quantityData, const QByteArray &data);public: void m_readData(int nodeAddress, int startDataAddress, int quantityData, QByteArray &data, bool manual) { if (manual) emit s_readData(nodeAddress, startDataAddress, quantityData, data); data = cb->readReadyData(nodeAddress, startDataAddress, quantityData); } void m_writeData(int nodeAddress, int startDataAddress, int quantityData, const QByteArray &data, bool manual) { if (manual) emit s_writeData(nodeAddress, startDataAddress, quantityData, data); }protected: void run() { cb = new B; connect(this, SIGNAL(s_readData(парам)), cb, SLOT(slotReadFromNode(парам))); connect(this, SIGNAL(s_writeData(парам)), cb, SLOT(slotWriteToNode(парам))); QTimer timer; connect(timer, SIGNAL(timeout()), cb, SLOT(pollingNodes())); timer->start(1000); exec(); }private: B* cb;}