谢谢

解决方案 »

  1.   

    1,把变量定义为全局变量,直接在线程里面就可以改了
    2,创建线程的时候,有个lpParam参数,把变量的地址作为参数.
    在线程里面使用的时候,加个强制转化.例如: 
    int i;
    CreateThread(,,,&i,,); //把i的地址作为参数传给线程.线程函数
    int * i = (int *)lpParam;
      

  2.   

    theApp.*
    (类型转换)theApp.m_pMainWnd->其他的,通过线程函数的参数传递指针,数据多可以建个结构体,
      

  3.   

    第二种方法可行,但第一种全局变量的方法总是有错.
    我是如下作的:
    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)
      

  4.   

    但第一种全局变量的方法总是有错.
    ------------------------------
    在CPP文件前面,加上:
    extern int i;
    就可以了
      

  5.   

    头文件里都是声明
    定义要在.c或.cpp中
      

  6.   

    AfxBeginThread(SendDataThread,0,THREAD_PRIORITY_NORMAL);
    线程函数的第二个参数不就是线程参数吗, 你把主线程的那个变量的地址封装在一个结构体里, 然后把该结构体作为线程参数就行.
      

  7.   

    // zx4Dlg.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” : 未声明的标识符
      

  8.   

    定义一个线程类,类中.h声明主类。然后定义主类变量
    .cpp包含主类头文件,然后用主类变量修改主类成员
      

  9.   

    如果你是MFC程序的话,就直接传递一个包含变量的对象的指针作为线程函数的参数就可以了。
    如果不是MFC程序的话,最好用全局变量。为了程序的健壮性,以上这两种情况你都需要考虑到临界资源。