मैं एक छोटा बहुप्रचारित वेब सर्वर बना रहा हूं। QTcpSockets को मुख्य थ्रेड में लाया जाता है और फिर QTConcurrent द्वारा QThreadPool तक सौंप दिया जाता है, जो अंततः डेटा को संसाधित करता है और एक उत्तर भेजता है।QThreadPool का उपयोग करते समय QObject :: moveToThread() को कैसे करें?
मेरी समस्या यह है कि सॉकेट मुख्य धागे में बनाया गया है और दूसरे में संसाधित किया गया है। जब सॉकेट से लिखने की कोशिश कर यह त्रुटियों का कारण बनता:
socket->write(somedata);
QObject: एक माता-पिता के लिए एक अलग थ्रेड में है कि के लिए बच्चों बनाई जा सकती। (पैरेंट QNativeSocketEngine (0x608330), माता पिता की धागा QThread (0x600630 है) है, वर्तमान धागा है QThread (0x505f60)
साफ रास्ता
का उपयोग कर प्रसंस्करण धागा करने के लिए सॉकेट वस्तु ले जाने के लिए होगाsocket->moveToThread(QThread::currentThread()).
यह, हालांकि, सिर्फ धागा वस्तु में बनाया गया था के भीतर बुलाया जा सकता है। इसके अलावा, सॉकेट, माता पिता के रूप QTcpServer वस्तु है तो moveToThread() वैसे भी (parented वस्तुओं धागे नहीं बदल सकते) असफल हो जायेगी।
मैं ऑब्जेक्ट को थ्रेडपूल द्वारा चलाए गए कोड के भीतर QThread :: currentThread() पर कैसे स्थानांतरित कर सकता हूं? वैकल्पिक रूप से, मैं इसे बनाए गए थ्रेड के बाहर सॉकेट में कैसे लिख सकता हूं?
धन्यवाद, मुझे यह पोस्ट पता है। असल में मैं इस समय बिल्कुल इस तरह से कर रहा हूं, लेकिन यह थ्रेड पूल के साथ काम नहीं करता है, जिसे मैं उपयोग करना चाहता हूं। जब आप कई धागे में काम वितरित करते हैं तो आप प्रोग्रामिंग में किसी भी तरह के ट्रेड पूल की तरह कुछ भी करते हैं, तो मौजूदा का उपयोग क्यों न करें? :) – grefab