我有以下一个程序:
A{
  ...
//此处有两个变量a,b被下面的函数引用
   B(a,b)//此函数较费时
  ...}
A函数在不断得被执行.
我想把B函数用一个线程来使用,以免影响B之后的执行,不知用多线程能否解决,如何解决,麻烦给个例子.谢谢!

解决方案 »

  1.   

    创建一个工作者线程 
    UINT ReadThreadKey(LPVOID lParam)
    {
       return 1;
    }在A 中启动AfxBeginThread(ReadThreadKey,&m_Key);
      

  2.   

    去看MSDN吧,应该养成这样的习惯。这是MSDN的例子#include <stdio.h> 
    #include <windows.h> 
     
    #define THREADCOUNT 4 
    DWORD dwTlsIndex; 
     
    VOID ErrorExit(LPTSTR); 
     
    VOID CommonFunc(VOID) 

       LPVOID lpvData; 
     
    // Retrieve a data pointer for the current thread. 
     
       lpvData = TlsGetValue(dwTlsIndex); 
       if ((lpvData == 0) && (GetLastError() != 0)) 
          ErrorExit("TlsGetValue error"); 
     
    // Use the data stored for the current thread. 
     
       printf("common: thread %d: lpvData=%lx\n", 
          GetCurrentThreadId(), lpvData); 
     
       Sleep(5000); 

     
    DWORD WINAPI ThreadFunc(VOID) 

       LPVOID lpvData; 
     
    // Initialize the TLS index for this thread. 
     
       lpvData = (LPVOID) LocalAlloc(LPTR, 256); 
       if (! TlsSetValue(dwTlsIndex, lpvData)) 
          ErrorExit("TlsSetValue error"); 
     
       printf("thread %d: lpvData=%lx\n", GetCurrentThreadId(), lpvData); 
     
       CommonFunc(); 
     
    // Release the dynamic memory before the thread returns. 
     
       lpvData = TlsGetValue(dwTlsIndex); 
       if (lpvData != 0) 
          LocalFree((HLOCAL) lpvData); 
     
       return 0; 

     
    DWORD main(VOID) 

       DWORD IDThread; 
       HANDLE hThread[THREADCOUNT]; 
       int i; 
     
    // Allocate a TLS index. 
     
       if ((dwTlsIndex = TlsAlloc()) == -1) 
          ErrorExit("TlsAlloc failed"); 
     
    // Create multiple threads. 
     
       for (i = 0; i < THREADCOUNT; i++) 
       { 
          hThread[i] = CreateThread(NULL, // no security attributes 
             0,                           // use default stack size 
             (LPTHREAD_START_ROUTINE) ThreadFunc, // thread function 
             NULL,                    // no thread function argument 
             0,                       // use default creation flags 
             &IDThread);              // returns thread identifier 
     
       // Check the return value for success. 
          if (hThread[i] == NULL) 
             ErrorExit("CreateThread error\n"); 
       } 
     
       for (i = 0; i < THREADCOUNT; i++) 
          WaitForSingleObject(hThread[i], INFINITE); 
     
       return 0; 

     
    VOID ErrorExit (LPTSTR lpszMessage) 

       fprintf(stderr, "%s\n", lpszMessage); 
       ExitProcess(0); 

      

  3.   

    较费时的开个woker thread给他
    避免影响ui Thread的响应问题!
      

  4.   

    http://hao.kjz.cn/xml/040917124516.xml