gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:03:04 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com