求助!关于线程CreateThread里传递的参数问题

chxy85 2009-07-07 04:37:38
关于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;
...全文
209 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxy85 2009-07-09
  • 打赏
  • 举报
回复
谢谢!谢谢大家,有些东西平时练习时都很熟练了,可真正到用时又发现问题了。我本意是做个SOCKET,主线程忙自己的,一个线程建立连接,一个线程负责发送数据。现在问题搞定了
qq675927952 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 NineheadedBird 的回复:]
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;
}
[/Quote]

up
udknight 2009-07-08
  • 打赏
  • 举报
回复
传进去的不是地址,只是将int a 强转为 int *。恰好4字节所以编译器没有报错。应该传入&a
Jimmy_Xia 2009-07-08
  • 打赏
  • 举报
回复
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;
}
zhaohongbo83 2009-07-08
  • 打赏
  • 举报
回复
(int *)a你这是地址吗?
(int*)&a这样才是a的地址
m_tornado 2009-07-08
  • 打赏
  • 举报
回复
传个根本不是指针,能变就怪了,扯~~
reage_wang 2009-07-07
  • 打赏
  • 举报
回复
UP right
ChamPagneZ 2009-07-07
  • 打赏
  • 举报
回复

#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;
}
孤客天涯 2009-07-07
  • 打赏
  • 举报
回复
void WINAPI ConnThread(LPVOID sockClient)
{
int *isockClient = (int*)sockClient;
.....
}
greatws 2009-07-07
  • 打赏
  • 举报
回复
(int *)a你这是地址吗?
(int*)&a这样才是a的地址

NineheadedBird 2009-07-07
  • 打赏
  • 举报
回复
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;
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧