将数组传递给线程

时间:2014-04-10 11:15:03

标签: c++ multithreading

我一直在尝试将short int *,一个短整数数组传递给std::thread,但数组已经损坏,或者没有直接传入线程..

为什么?数组的名称是指向第一个单元格的指针,所以我猜它是通过引用传递的,对吗?

这是我的代码:

    short int waveIn[NUMPTS];
     // doing sutff with the array
    std::thread t1(toString, waveIn);
t1.detach();

和线程函数:

void toString(short int *waveIn)
{

  //    doing stuff with the array
}

但是所有的数组单元格都是-1308,我在将数组传递给线程之前检查过,数组单元格中有些东西......

我的问题是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

当线程waveIn尝试使用它时,数组t1是一个局部变量,可能超出了范围(因此堆栈上的空间将被回收用于其他目的)。

答案 1 :(得分:2)

将指针传递给本地数组,该数组在离开作用域时被释放。因此,在线程访问它之前,可以重用该数组的内存。

您可以将数组的数据复制到std :: vector(或使用std :: vector开头)并将其移动到线程。这样,数据将保留,直到线程处理向量为止。

答案 2 :(得分:2)

而不是

short int waveIn[NUMPTS];

使用动态分配:

short int *waveIn = new int[NUMPTS];

在分离了hild线程之后,不要忘记解除分配,因为:

delete [] waveIn;