问一下Windows多线程中,怎么在线程里修改主函数的值呢?例如下例程序中,本人要在print线程中修改主函数

C语言 码拜 8年前 (2016-05-06) 714次浏览
#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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明问一下Windows多线程中,怎么在线程里修改主函数的值呢?例如下例程序中,本人要在print线程中修改主函数
喜欢 (0)
[1034331897@qq.com]
分享 (0)