- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在做一个项目,在这个项目中我必须使用指针结构作为线程的输入参数。我的代码看起来像这样:
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 );
}
为什么我的程序显示主线程值不同,我该如何纠正?
最佳答案
您在堆栈上声明您的结构和 double 值,一旦该方法返回(在 _beginthread()
返回之后),堆栈将被删除,导致未定义的行为。
您需要在堆上分配结构,包括double
值。您还需要管理分配的内存。
此外,我不明白您为什么使用 double *
而不是简单地使用 double
。
编辑:一些示例代码。这会在堆上分配结构并将分配的数据传递回调用者。还有一些工作要做线程同步,这超出了这个问题的范围:
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);
}
coord *startThread()
{
coord *inData = new coord;
inData->xPos = 10;
inData->yPos = 10;
_beginthread( foo, 0, (void*) inData );
return inData;
}
int main()
{
coord *data = startThread();
printf("Initial values:\n");
printf("xVal: %f\n", data->xPos);
printf("yVal: %f\n", data->yPos);
// TODO: wait for thread
return 0;
}
关于c++ - 在 C++ 中使用带有指针结构的 beginthread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25447967/
我现在已经有了一个即将完成的应用程序,我想要实现的下一个功能是线程。我选择使用 BeginThread(),尽管我知道 delphi 中的 TThread。我遇到的问题是 BeginThread()
我正在使用 BeginThread 创建一个线程。 在我用来启动线程的过程中,我想传递一个指向 bool 变量的指针,以便 fork 线程和主线程都可以将其作为控制变量访问,以告诉一个线程何时完成。
我正在做一个项目,在这个项目中我必须使用指针结构作为线程的输入参数。我的代码看起来像这样: struct coord { double* xPos; double* yPos; };
我想知道是否将 beginthread 或 QueueUserWorkItem 用于 C++ 中的线程方法。这两个 API 之间有什么区别,它们更适合在什么情况下使用? 谢谢, 顺便说一句,我读过这个
我是一名优秀的程序员,十分优秀!