void MatchThread::run(){ QString str; if ( type == 1){//Таким образом вызываю быстрые расчеты на выполнение BuildingA *r1 = new BuildingA(); str = (r1->buildingA(myListN)); } if ( type == 2){//Таким образом вызываю ДОЛГИЕ расчеты на выполнение BuildingB *r1 = new BuildingB(); str = (r1->buildingB(myListN)); } exec();}
C++ (Qt)QTcpServer server;...class type1_processor: public QThread { type1_processor(QTcpSocket* s):sock(s),stop(false) { читаем все данные из сокета.... после того как прочли все данные... соединяем сигнал сокета readyRead() со слотом type3_writen() }private slots: void type3_writen() { if ( is_type3(sock) ) { stop = true; } } /* */ void run() { while ( !stop ) { тут мы работаем с данными. } } /* */ QTcpSocket* sock; volatile bool stop;}; class type2_processor: public QThread { по аналогии...}; int main() { while ( server.waitForNewConnection() ) { QTcpSocket* sock = server.nextPendingConnection(); if ( is_type1(sock) ) { type1_processor(sock); } else if ( is_type2(sock) ) { type2_processor(sock); } }}
void EchoServer::removeThread(){ EchoThread *thread = qobject_cast<EchoThread*>(sender()); m_threads.removeAt(m_threads.indexOf(thread)); thread->deleteLater();}