主程序生成一个线程,这个线程如何能修改主程序中的一个变量?请大家给一个简单的代码吧 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,把变量定义为全局变量,直接在线程里面就可以改了2,创建线程的时候,有个lpParam参数,把变量的地址作为参数.在线程里面使用的时候,加个强制转化.例如: int i;CreateThread(,,,&i,,); //把i的地址作为参数传给线程.线程函数int * i = (int *)lpParam; theApp.*(类型转换)theApp.m_pMainWnd->其他的,通过线程函数的参数传递指针,数据多可以建个结构体, 第二种方法可行,但第一种全局变量的方法总是有错.我是如下作的:1、头文件中:int i;2、CPP文件中:void Czx4Dlg::OnBnClickedButtonStar(){ // TODO: 在此添加控件通知处理程序代码 HWND hWnd=GetSafeHwnd(); AfxBeginThread(SendDataThread,0,THREAD_PRIORITY_NORMAL);}UINT SendDataThread(LPVOID n){ extern int i; i=15; return 0;}编译报错:zx4 error LNK2001: 无法解析的外部符号 "int i" (?i@@3HA) 但第一种全局变量的方法总是有错.------------------------------在CPP文件前面,加上:extern int i;就可以了 头文件里都是声明定义要在.c或.cpp中 AfxBeginThread(SendDataThread,0,THREAD_PRIORITY_NORMAL);线程函数的第二个参数不就是线程参数吗, 你把主线程的那个变量的地址封装在一个结构体里, 然后把该结构体作为线程参数就行. // zx4Dlg.cpp : 实现文件//#include "stdafx.h"#include "zx4.h"#include "zx4Dlg.h"#include ".\zx4dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endifextern int i;UINT SendDataThread(LPVOID n);我就是这样在CPP文件前加上的全局变量出了如下的错误:f:\vs\zx4\zx4Dlg.cpp(62): error C2065: “m_edit” : 未声明的标识符 定义一个线程类,类中.h声明主类。然后定义主类变量.cpp包含主类头文件,然后用主类变量修改主类成员 如果你是MFC程序的话,就直接传递一个包含变量的对象的指针作为线程函数的参数就可以了。如果不是MFC程序的话,最好用全局变量。为了程序的健壮性,以上这两种情况你都需要考虑到临界资源。 关于 winsocket 丢包处理? 关于bmp图象模糊处理.. 哪位帮我看看下面这个程序错误。。。 获取U盘总容量 控制台 定时器的使用,CreateWaitableTimer SetWaitableTimer 熟悉微软WebBrowser控件制作浏览器的朋友过来瞧瞧:关于新开窗口的问题... 在使用动态连接库的程序中,出现错误时如何确定是dll文件出错还是主程序出错? jdy,谢谢你! ___如何象“网际快车”那样分段下载一个文件___up者有分 急急急,十万火急,关于计费软件的算法问题!!![email protected] 用vc++开发游戏 投诉 : 还有这样给分的?
2,创建线程的时候,有个lpParam参数,把变量的地址作为参数.
在线程里面使用的时候,加个强制转化.例如:
int i;
CreateThread(,,,&i,,); //把i的地址作为参数传给线程.线程函数
int * i = (int *)lpParam;
(类型转换)theApp.m_pMainWnd->其他的,通过线程函数的参数传递指针,数据多可以建个结构体,
我是如下作的:
1、头文件中:int i;
2、CPP文件中:void Czx4Dlg::OnBnClickedButtonStar()
{
// TODO: 在此添加控件通知处理程序代码
HWND hWnd=GetSafeHwnd();
AfxBeginThread(SendDataThread,0,THREAD_PRIORITY_NORMAL);}UINT SendDataThread(LPVOID n)
{
extern int i; i=15;
return 0;
}编译报错:
zx4 error LNK2001: 无法解析的外部符号 "int i" (?i@@3HA)
------------------------------
在CPP文件前面,加上:
extern int i;
就可以了
定义要在.c或.cpp中
线程函数的第二个参数不就是线程参数吗, 你把主线程的那个变量的地址封装在一个结构体里, 然后把该结构体作为线程参数就行.
//#include "stdafx.h"
#include "zx4.h"
#include "zx4Dlg.h"
#include ".\zx4dlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern int i;UINT SendDataThread(LPVOID n);
我就是这样在CPP文件前加上的全局变量
出了如下的错误:
f:\vs\zx4\zx4Dlg.cpp(62): error C2065: “m_edit” : 未声明的标识符
.cpp包含主类头文件,然后用主类变量修改主类成员
如果不是MFC程序的话,最好用全局变量。为了程序的健壮性,以上这两种情况你都需要考虑到临界资源。