创建线程函数CreateThread的lpParameter参数怎么设置才能将在主线程中初始化的值传递给线程函数

 我来答
Frank7258
推荐于2017-11-24 · TA获得超过1503个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:552万
展开全部
可以传递一个参数给线程函数,线程函数是这么个形式
DWORD WINAPI MyThreadProc(LPVOID lpParameter)
你在CreateThread给他的这个参数就是传递到了线程函数。这个参数完全是编程的人自己决定的,可以直接给NULL,比较常见的是你建立一个结构体,把你希望传递进去的信息都写在结构体里面
typedef struct
{
int paraInt;
DWORD paraDW;
....
} ThreadParameter;

然后在CreateThread:
ThreadParameter para;
//设置参数省略
CreateThread(NULL, NULL,
MyThreadProc, reinterpret_cast<ThreadParameter*>(& para),
NULL, NULL);
追问
呵呵,我就是想问的这个,有多个数据公用不知道能用结构体,主线程和辅线程需要用到共同的对象,那对象定义是不是要在这个结构体里?
追答
结构体可以定义任何的东西,但是在结构体里面定义对象还是定义指针你要根据自己的情况来看,一般定义指针比较多,比如你在主线程里面先操作一个对象,初始化啊什么的,然后将指针传递给工作线程进行后台时间比较长的工作。如果你只要一个参数那直接把对象指针传递过去就行了。

只是你要注意的是这个传递过去的lpParameter指针所指向的对象不能是局部变量,否则主线程的函数返回之后结构体对象就被删除了,这时候工作线程中的指针就变成了无效的指针,对无效指针的访问会导致Access Violation错误,默认Windows会弹个错误将程序强行结束。

如果你不想声明全局变量也不想为主线程所在的类(假定你是面向对象的编程)添加成员变量,可以用new在堆上创建一个对象,这样主线程函数返回的时候堆上的对象是不会删除的。只是你要记得在工作线程退出的时候要用delete把这个lpParameter给删除,否则就导致内存泄漏,内存泄漏少你不会察觉,泄漏多了你的程序的内存占用就会很厉害。

还有个比较偷懒的方法就是直接传this指针过去就行了。
xion9liang
推荐于2018-11-19 · 超过25用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:79.8万
展开全部
LPVOID lpParameter, 说明这个参数是个空指针类型, 简单的说,你想传任何东西都可以,强制转换就OK了.
例如 int i = 10; 你想传这个进去的话参数 就写 (void*)&i , 到了函数里面再强制转换回来 int iTemp = *((int*)lpParameter) 或者直接用指针 int* ipTemp = (int*) lpParameter;
例如 float f = 10.0; 你想传这个进去的话 就写 (void*)&f , 到了函数里面再强制转换回来 float fTemp = *((float*)lpParameter) 或者直接用指针 float* ipTemp = (int*) lpParameter;
自己的类的话 也是同样的转换
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yip_kof
2011-03-13 · TA获得超过198个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:92.9万
展开全部
VOID* 可以是任意的变量。。
可以传递一个结构体,也可以是类。。看你淫荡指数。。
请自己仔细看MSDN。孙鑫的VC++编程也讲过了。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hzymlx
2011-03-14
知道答主
回答量:16
采纳率:0%
帮助的人:1.5万
展开全部
直接把主线程的值所在的窗体传过去就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ly6765395
2011-03-13 · TA获得超过141个赞
知道答主
回答量:105
采纳率:0%
帮助的人:0
展开全部
int i=1;
CreateThread(.., (LPVOID)i ,..);
在线程函数在把变量的类型转换回来应该就可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式