emg*_*mge 5 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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
还要注意HANDLE应该全部上限.