我定义了一个UI线程,用来动态记录一个网址上的数据,我需要同时启动几个这样的线程,记录不同网址上的数据。如果用AfxBeginThread(RUNTIMECLASS(MyThread))几次的话,各线程所用的变量是一样的(即变量的内存地址是一样的),会互相干扰,无法记录不同网址的数据。能不能让各线程使用自已的变量,而不是公用?

解决方案 »

  1.   

    CWinThread* AfxBeginThread(
       AFX_THREADPROC pfnThreadProc,
       LPVOID pParam,
       int nPriority = THREAD_PRIORITY_NORMAL,
       UINT nStackSize = 0,
       DWORD dwCreateFlags = 0,
       LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
    );用这个 AfxBeginThread 
    然后你可以把线程需要的数据结构通过 pParam 传递给线程以让各线程的数据都是自己拥有的.或者你在线程运行时动态地分配内存来处理.
      

  2.   

    用 critical Section,使用CriticalSection.Lock 保护数据
      

  3.   


    1. 线程中只使用局部变量, 或
    2. 使用线程局部存储(TLS)
       .线程要访问的全局变量都用__declspec(thread)声明,如
       __declspec(thread) int g_nGlobal = 0;
      

  4.   

    不好意思,zhaolaoxin是对的,是我的程序的问题,谢谢大家了