全局变量:
int count=count1=0;
int buffer[t],我在一个线程中定义:
UINT ThreadProc(LPVOID lpParam)
{
    count++;
int t=count%5;
buffer[t]=count;
  return 0;
}
另一线程定义:
UINT ThreadProcwrite(LPVOID lpParam)
{
int p=count1%5;
buffer[p]=0;
count1++;
return 0;
}
分别由两个按钮启动,一个按钮的消息处理函数如下:
static HANDLE hHandle2=NULL; 
DWORD dwThreadID2;  
hHandle2 = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
                         0,
                         (LPTHREAD_START_ROUTINE) ThreadProcwrite,
                         (LPVOID) NULL,
                         0, &dwThreadID2 );
  DWORD lpexit2;
  VERIFY(::GetExitCodeThread(hHandle2,&lpexit2)) ;
if(lpexit2==STILL_ACTIVE)
{
//ExitThread(lpexit2);(为何用exitthread就退出整个程序?)
TerminateThread(hHandle2,lpexit2);
         CloseHandle(hHandle2);
}
}
现在问题是当先执行1线程后再点击2的按钮执行2线程时,第一次按键仍将1线程再次
执行一遍,当执行2线程后再执行1线程时也会把2先执行一遍
请大家帮忙。
另:如用afxbeginthread启动线程时,如何用afxendthread撤销线程?
我这样调用总是出错:
HWND hWnd=GetSafeHwnd();
         CWinThread *wThread1=NULL;
         wThread1=(CWinThread*)AfxBeginThread(ThreadProcwrite,hWnd);
         DWORD lpexit2;
  VERIFY(::GetExitCodeThread(wThread1->m_hThread,&lpexit2)) ;
if(lpexit2==STILL_ACTIVE)
{      
AfxEndThread(lpexit2);
}

解决方案 »

  1.   

    1,首先,ExitThread/AfxEndThread函数,都是终止当前执行的线程,也就是说,这条语句在那个线程中执行,就终止那个线程;所以,你要终止一个线程,必须在你要终止的那个线程里面调用AFxEndThread/ExitThread,另外,如果线程函数结束,线程自动终止。
    2,至于第一个问题,我没有很明白你的意思。
      

  2.   

    同意楼上看一下这个
    http://expert.csdn.net/Expert/topic/2381/2381919.xml?temp=.3911402