关于CreateThread()传递的参数问题。是这样,我在主线程中用CreateThread()新建线程,第四个参数传入了一个我希望处理的数,但是处理完成后发现在主线程中的数字并没有更改,求解,代码如下:void WINAPI ConnThread(int sockClient)
{
sockClient = 30;
cout<<sockClient<<endl;
}
int main(int argc, char* argv[])

int a = 10;
CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(int *)a,0,0);
  Sleep(100);
cout<<a<<endl;
return 0;

输出是30,10,并不是我期望的30,30
关键是为什么,第四个参数明明传入的是地址,但是在线程函数中可以却用普通变量类型接受,让我感觉就好像是int a = (int *)10;

解决方案 »

  1.   

    CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(LPVOID)&a,0,0);
    void WINAPI ConnThread(LPVOID sockClient)
    {
        int* i = (int*)sockClient;
        *i = 30;
        cout<<sockClient<<endl;
    }
      

  2.   

    (int *)a你这是地址吗?
    (int*)&a这样才是a的地址
      

  3.   

    void WINAPI ConnThread(LPVOID sockClient)
    {
        int *isockClient = (int*)sockClient;
        .....
    }
      

  4.   


    #include <iostream>
    #include <Windows.h>
    using namespace std;
    DWORD  WINAPI ConnThread(PVOID sockClient)
    {
    int * temp = (int *)sockClient;
    *temp = 30;
    cout<<*temp<<endl;
    return 0;
    }int main(int argc, char* argv[])

    int a = 10;
    CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread1,(PVOID)&a,0,0);
    Sleep(100);
    cout<<a<<endl;
    return 0;

      

  5.   

    传进去的不是地址,只是将int a 强转为 int *。恰好4字节所以编译器没有报错。应该传入&a
      

  6.   

    (int *)a你这是地址吗? 
    (int*)&a这样才是a的地址
      

  7.   

    void WINAPI ConnThread(int* sockClient)
    {
        *sockClient = 30;
        cout<<*sockClient<<endl;
    }int a = 10;
    int main(int argc, char* argv[])

        CreateThread(0,0,(LPTHREAD_START_ROUTINE)ConnThread,(int *)&a,0,0);
         Sleep(100);
        cout<<a<<endl;
        return 0;

      

  8.   

    谢谢!谢谢大家,有些东西平时练习时都很熟练了,可真正到用时又发现问题了。我本意是做个SOCKET,主线程忙自己的,一个线程建立连接,一个线程负责发送数据。现在问题搞定了