c - 将参数传递给 _beginthread()——怎么了?

标签 c multithreading struct arguments

我有这段代码,但没有得到预期的结果……怎么了?

typedef struct {
   int data1;
   int data2;
}t;

void foo(int a, int b) {

   Handle handle;
   t arg;
   arg.data1 = a;
   arg.data2 = b;
   handle = (HANDLE) _beginthread( myFunc, 0, (void*) &arg);
}

void myFunc(void *param) {
   t *args = (t*) param;
   int x = args->data1;
   int y = args->data2;
   printf("x=%d, y=%d\n", x, y);
} 

最佳答案

arg 是在 foo 中定义的局部变量 - 一旦该函数结束,它就会被销毁,但是正在运行的 myFunc另一个线程仍将尝试访问它。您应该在堆上分配 arg 并在完成后在线程中销毁它。

void foo(int a, int b) {
   HANDLE handle;
   t *arg;
   arg = (t *)malloc(sizeof(t));
   arg->data1 = a;
   arg->data2 = b;
   handle = (HANDLE) _beginthread( myFunc, 0, (void*) arg);
}

void myFunc(void *param) {
   t *args = (t*) param;
   int x = args->data1;
   int y = args->data2;
   printf("x=%d, y=%d\n", x, y);
   free(args);
}

另请注意,HANDLE 应全部大写。

关于c - 将参数传递给 _beginthread()——怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169009/

相关文章:

java - 显示所有小于输入的素数的多线程程序

将数据复制到 C 中结构内部的字符串会导致段错误

c# - 如何使用显式对齐(非托管 dll)将结构从 C 编码到 C#

c - C : Declaration of Functions简介

java - 多 :Threading - Is this the right approach?

C++,如何在头文件中声明结构

c - 访问函数内部创建的数据结构?

c++ - VS2010和C/C++后台编译

c - 使用 strtok 中的值传递给函数

c++ - CreateThread 调用错误