这个是我的头脑。我正在尝试在我的 C++ 代码中使用多线程。我将所有(许多)论点放入一个结构中
struct ARGS{
//argument definitions
};
ARGS funcArgs = //function arguments
并将其传递给我的函数
Handles[0] = CreateThread(0,0,(LPTHREAD_START_ROUTINE)myFunc,&funcArgs,0,NULL)
函数定义看起来像
void myFunc( void *funcArgs_ ){
ARGS *funcArgs = (ARGS*)funcArgs_;
//do stuff here
}
我已经成功地使用此方法创建了一个单独的线程来运行我的 main 函数,而不会挂起我的 gui。我现在遇到的问题是我想要运行四个单独的线程,并修改每个新线程之间的一些输入参数,但是因为它是通过指针传递的,所以它会影响在之前的线程中执行的计算. 我意识到我可以简单地创建一个 ARGS 类型的新变量并将其传递给第二个线程,但是 funcArgs 中的一个参数是vector<vector<double> >
大约 6GB 的数据,所以我不能将它复制到一个新的结构中,并且它对于每个线程都保持不变,因此复制它会完全浪费 RAM。
我很乐意为不需要更改的大变量创建一个数据结构,为确实更改但CreateThread
只接受一个参数的函数创建另一个数据结构,所以我不能这样做。
我认为我可以做的另一件事是创建一个类型为 ARGS 的新变量,但通过这样做来解决复制数据的问题
struct ARGS{
vector<vector<double> > *hugeArrayPtr;
//other argument definitions
};
但是我尝试了这个,当我尝试取消引用指针时,我得到“错误 C2100:非法间接”。事实证明,这是因为我使用索引来迭代数组(向量)元素,而当使用指向向量的指针时,您需要使用迭代器。这样做的麻烦在于它需要对我的代码进行大量重写,而且我不完全确定如何去做。所以这将非常耗时,而且我最终可能会导致比我解决的问题更多的问题。
最终,这可能是唯一的方法,但我希望有一个更简单的解决方案。任何帮助将不胜感激。