Sto costruendo un piccolo server Web con multithreading. I QTcpSocket vengono recuperati nel thread principale e quindi trasferiti da QtConcurrent a QThreadPool, che alla fine elabora i dati e invia una risposta.Come eseguire QObject :: moveToThread() quando si utilizza QThreadPool?
mio problema è che la presa viene creato nel thread principale ed elaborati in un altro. Questo fa sì che gli errori quando si cerca di scrivere nel socket:
socket->write(somedata);
QObject: Impossibile creare bambini per un genitore che si trova in un thread diverso. (Parent è QNativeSocketEngine (0x608330), filo genitore è QThread (0x600630), thread corrente è QThread (0x505f60)
pulita modo sarebbe per spostare l'oggetto presa al filo lavorazione utilizzando
socket->moveToThread(QThread::currentThread()).
Questo, tuttavia, può essere chiamato solo all'interno del filo l'oggetto è stato creato in. Inoltre, la presa ha l'oggetto QTcpServer come genitore, così moveToThread() fallirà comunque (oggetti parented non possono passare fili).
Come posso spostare l'oggetto nella QThread :: currentThread() all'interno del codice che viene eseguito dal ThreadPool? In alternativa, come posso scrivere su un socket al di fuori del thread che è stato creato?
Grazie, lo so questo post. In effetti lo sto facendo esattamente in questo modo al momento, ma questo non funziona con un pool di thread, che mi piacerebbe utilizzare. Quando si distribuisce il lavoro su più thread, si finisce comunque con la programmazione di un battistrada, quindi perché non utilizzare quello esistente? :) – grefab