2011-03-19 51 views
1

我已經看到了C#和VB這樣的例子,但我真的很受限於C++,我試圖通過20個字符串到後臺工作,使其能對他們執行任務。我已經嘗試過傳遞窗體對象,但它不能從一個System :: Object轉換回Form,而不會導致編譯器錯誤。如何衆多的參數傳遞給一個BackgroundWorker在C++

我也試過路過它通過DoWork的方法中包含字符串對象,但是這也不起作用。

任何幫助將不勝感激。謝謝

+1

你能不能給的,爲什麼所包含對象的字符串沒有工作的細節(以及可能的代碼)? – 2011-03-19 20:11:24

回答

0

對於字符串更大數量(或更一般地,「任務」),你要麼使用同步隊列,隊列lockfree,或者最簡單的方法,完成端口。完成端口的效率非常高,如果您的任務數量不超過幾萬個,那麼確實不值得考慮更復雜的解決方案。

僅適用於20個任務,這通常是矯枉過正(除非每一個任務了很長一段時間運行),將寄託都成一個對象,並傳遞一個指向對象是最好的解決方案。否則,通信/同步開銷超過了多線程的收益。

傳遞一個指向結構的工作線程應該努力用C完全正常++(我做了所有的時間)。究竟是什麼問題?

+0

我試過使用一個結構體並將一個指針傳遞給它,但是,當定義頭文件中的結構體時,我總是收到編譯錯誤 錯誤C3265:無法在非託管數據中聲明託管「長度」 '不能聲明全局或靜態變量,或者使用命名空間System來引用gc堆中的對象的本機類型的成員; 結構數據 { \t \t靜態字符串^長度; \t \t static String^width; \t \t \t \t };' – user667640 2011-03-19 20:39:18

+0

嗯......你說你受限於C++,並標記你的問題爲 「C++」 過。這是你發佈的C#代碼,我很驚訝,沒有更多的錯誤。嘗試像結構數據{std :: string * a; std :: string b; };並將數據*傳遞給您的線程函數。 – Damon 2011-03-19 20:50:46

+0

我是個白癡。非常感謝。 – user667640 2011-03-19 20:54:18

相關問題