#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <Windows.h>
DWORD WINAPI print(void *p) {
for (;;) {
printf("按Enter键终止运行\n");
}
return 0;
}
int main(int argc, char *argv[])
{
int i = 0;
HANDLE p = CreateThread(NULL, 0, print, NULL, 0, NULL);
for (;;) {
getchar();
TerminateThread(p, 0);
}
return 0;
}
解决方案
3
将该值指针作为线程函数参数传递给线程函数,多看看msdn
5
要在线程中修改变量i的值,可以把i的指针传递到线程函数中,CreateThread的第四个参数就是用来传递东西的
5
线程启动的地方,那个函数中,局部变量的地址 可以传递给子线程
前提是,子线程要比这个函数结束的早
函数结束后,子线程中操作这个地址中的数据,就变成 对野指针进行操作了
还有一个办法是
函数中,动态分配数据,并初始化
而在在子线程中释放内存,不过,这样就不能改动主线程的函数中的数据了
除非二者共享动态分配数据的数据
共享数据,通常需要同步
前提是,子线程要比这个函数结束的早
函数结束后,子线程中操作这个地址中的数据,就变成 对野指针进行操作了
还有一个办法是
函数中,动态分配数据,并初始化
而在在子线程中释放内存,不过,这样就不能改动主线程的函数中的数据了
除非二者共享动态分配数据的数据
共享数据,通常需要同步
14
DWORD WINAPI print(void *p) {
*(int*)p = 1; //这里修改主函数i
for (;;) {
printf("按Enter键终止运行\n");
}
return 0;
}
int main(int argc, char *argv[])
{
int i = 0;
HANDLE p = CreateThread(NULL, 0, print, &i, 0, NULL);
for (;;) {
getchar();
TerminateThread(p, 0);
}
return 0;
}