2011-03-19 60 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

相关问题