我有一個有趣的問題。使用Qt處理C++項目。跨平臺項目,但在Win上發展。如何使C函數有效地等待Qthread完成工作?
我有一個C風格的回調函數。它需要是C風格,我沒有選擇它。 在C風格的回調函數中完成的工作是重要且時間敏感的。因此,我有一些Qthread線程可以幫助解決工作負載。
我沒有使用Qt線程的運行方案,而是使用QThreads作爲解釋在QThread文檔的底部。 http://qt-project.org/doc/qt-5.0/qthread.html#wait
爲了清楚起見,我使用的QThread這樣:
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
thread->start();
QMetaObject::invokeMethod(worker, "doWork", Qt::QueuedConnection);
的線程在應用程序的開始作出,QMetaObject :: invokeMethod中被饋送。
面臨的挑戰是,在QThread線程完成其工作之前,沒有C回調函數執行「任何事情」(以有效的方式)。我想讓回調函數以這樣一種方式等待,即它不會與工作線程競爭CPU(所以沒有繁忙的虛擬循環)。我也可以使用像sleep()這樣的東西,但這不是有效的,因爲如果線程「提前」完成,就會浪費睡眠。我想從工作人員發出一個信號,但問題是我的回調是一個C函數,所以我不明白它是如何捕捉Qt信號的。
不能老是你包C函數的使用Qt類和捕獲信號有:
的基準測試結果如下圖呈現? – dvvrd 2012-04-13 18:16:53
不,我不能。 C函數不僅僅是一個C函數,它是一個回調函數。一部分的lib。我不能改變它的性質,我只能執行它的身體。我對什麼/誰調用回調沒有影響力,我需要保持一個C回調函數。 – L123 2012-04-13 18:26:20