このブログ、このブログ、およびその他のブログを読んで、QThread をサブクラス化することは悪い習慣です。そこで、この方法を応用してみました。
しかし、私の問題は、別のスレッドに移動したいクラスに QTimer と QTcpSocket があることです。突然、例で使用したほど簡単ではなくなりました。:(
QThread m_commsThread;
m_pICommsHandler = new CommsHandlerIP();
m_pICommsHandler->moveToThread(&m_commsThread);
m_commsThread.start();
そして、これが CommsHandlerIP クラスで、メソッドは含まれていません。
class CommsHandlerIP : public QObject
{
Q_OBJECT
public:
CommsHandlerIP();
~CommsHandlerIP(void);
protected:
QTcpSocket m_TCPSocket;
QTimer m_timer;
}
問題は、CommsHandlerIP を移動しても、QTimer と QTcpSocket (CommsHandlerIP クラス内) がメイン スレッドにあることです。そのため、タイマーを開始したり、ソケットを接続したりできません。
QTimer と QTcpSocket を moveToThread しようとすると (たとえば、スレッド ポインターを渡すことによってコンストラクター内で)、アプリを終了すると非常に面倒になります。
私は何をすべきか?