【发布时间】:2014-08-22 13:15:52
【问题描述】:
我正在做一个项目,在该项目中我必须使用指针结构作为线程的输入参数。我的代码如下所示:
struct coord
{
double* xPos;
double* yPos;
};
void cdecl foo( void* inData)
{
coord* my_data = (coord*) inData;
printf("Thread values:\n");
printf("xVal: %f\n", *(my_data->xPos) );
printf("yVal: %f\n", *(my_data->yPos) );
}
主体看起来像这样:
{
double startX = 10;
double startY = 10;
/* declare variables to hold the incoming values */
coord inData;
inData.xPos = &startX;
inData.yPos = &startY;
printf("Initial values:\n");
printf("xVal: %f\n", *(inData.xPos) );
printf("yVal: %f\n", *(inData.yPos) );
_beginthread( foo, 0, (void*) &inData );
}
为什么我的程序显示主线程和线程的值不同,我该如何纠正?
【问题讨论】:
-
当您的线程运行时,main() 可能已经返回。要么通过值将数据传递给线程,要么确保在线程读取它们时指向的值仍然存在。在这种情况下,
HANDLE h=(HANDLE)_beginthread... ; WaitForSingleObject(h);将确保 main 在线程返回之前不会返回。你也应该用 _endthread() 关闭线程句柄。 -
你应该使用
std::thread。
标签: c++ windows multithreading pointers structure