none
多线程传递局部变量问题 RRS feed

  • 问题

  • 例如:
    代码片段:
    fun1()
    {
    ......
         int i1 = 10;
         _beginthreadex( NULL, 0, &ThreadFun,&i1, 0, NULL );
    }

    unsigned int __stdcall ThreadFun( void* lpParam )
    {
    int i2 =  *(int*)(lpParam);//在这里由于取不到上面传来的值。
             ........
    }

    由于i1是局部变量,所以当fun函数返后i1内存被释放,在线程中会取不到值,请问有什么办法能传递局部变量吗?必须要在堆中申请空间?
    2009年12月10日 3:30

答案

  • 若你只是传递一个int值,那么可以直接
    _beginthreadex( NULL, 0, &ThreadFun,(void*)i1, 0, NULL );

    int i2 =  (int)lpParam;

    若是一个结构,那么必须new或alloc空间了或者使用寿命长过该线程的内存块.


    0xBAADF00D
    • 已标记为答案 Nancy Shao 2009年12月15日 10:08
    2009年12月10日 9:09
    版主

全部回复

  • 若你只是传递一个int值,那么可以直接
    _beginthreadex( NULL, 0, &ThreadFun,(void*)i1, 0, NULL );

    int i2 =  (int)lpParam;

    若是一个结构,那么必须new或alloc空间了或者使用寿命长过该线程的内存块.


    0xBAADF00D
    • 已标记为答案 Nancy Shao 2009年12月15日 10:08
    2009年12月10日 9:09
    版主
  • 谢谢,我可以这样理解吗?你这样的传值方式vc把它当做值拷贝?而我之前的方式是传的引用(地址)??
    2009年12月10日 11:20
  • bingo


    0xBAADF00D
    2009年12月10日 14:01
    版主