用afxbeginthread开启了一个线程,我现在在别的函数中想强行终止该线程,怎么终止呀?我创建该线程的语句如下:
m_pThread=AfxBeginThread(RecvThread……
m_pThread中我查看了半天也没有强行终止的语句呀!
谢谢高手的指点,在线等

解决方案 »

  1.   

    TerminateThread()
    具体参数看一下MSDN。
      

  2.   

    建议不要使用terminatethread()该函数会有很多后遗症,比如说资源释放等等。一个线程执行完后会自动结束自己,如果想在另一个线程中控制该线成的执行,可以使用线程同步,比如事件同步createevent(),setevent(),resetevent()和waitforsingleobject()等控制线成的停止和继续执行,具体参看msdn载有建议找些资料看看。
      

  3.   

    我现在急用呀。
    我现在就想在另外一个函数中把这个线程强行结束,不想什么通讯什么的。有什么办法没有?现在在另外一个函数中唯一可控制的只有m_pThread这个。
    分不够,另外给,再加50分。解决问题就给分。
    谢谢
      

  4.   

    TerminateThread( m_pThread, 0 ) ;
      

  5.   

    说错了,是AfxEndThread( UNIT nExitCode ) ;
      

  6.   

    可定义一个数据结构,
    struct Param
    {
    UINT   nThread;    
    HANDLE hEvent;
    BOOL    bBusy;
    BOOL    bDestroy;
    };
    同时为此线程CreateEvent,保存到hEvent中,在线程中通过hEvent,WaitForSingleObject来控制它的生死
      

  7.   

    TerminateThread(hThreadG7231,0);
    TerminateThread(hThreadTCPRev,0);
      

  8.   

    可能我没有说清楚,我在一个函数中,要将另外的一个线程终止,而这个函数还不能结束,这个函数还有事情要干的。
    而AfxEndThread( UNIT nExitCode )中是关闭哪个线程?
    我很菜,不好意思了。
      

  9.   

    不完整代码
    UINT SendData(void* cs)
    {
    SOCKET clientSocket=(SOCKET)cs;
    while(1)
    {
    if(info_data.data!="Close!")
    {
    m_mutex.Lock();               //互锁
    numsnd=send(clientSocket,info_data.data,
    info_data.data.GetLength(),NO_FLAGS_SET); //发送数据
    now=info_data.thread;
    m_mutex.Unlock();             //解锁
    now->SuspendThread();         //自身挂起
    }
    else
    {   goto bb; } }
    bb: closesocketlink((LPVOID)clientSocket);    //关闭连接
    AfxEndThread(0,true);                         //结束本线程
    return 1;
    }
      

  10.   

    yaotang(baobao) 
    TerminateThread(hThreadG7231,0);hThreadG7231是什么东东?
      

  11.   

    在应用程序中加一个全局BOOL型变量用于线程同步:线程运行时,变量置为TRUE,
    要终止线程时,变量置为FALSE。在线程中定期检测此变量,当值为FALSE时,退出线程,即可。
      

  12.   

    hThreadG7231
    你新建线程的句柄
      

  13.   

    线程一般模式如下:.h文件
    =====================
    class CRawThread
    {
    private:
    ...
    public:
    ...
    friend unsigned __stdcall _raw_thread_function(void *param);
    //将线程函数定义为这个类的友元函数,避免线程内部访问类的私有元素的时候出现错误。
    };.cpp文件
    ====================
    #include <process.h>   //记得这一行...unsigned __stdcall _raw_thread_function(void *param)
    {
    CRawThread *pThis = (CRawThread *)param;  //这里将参数转换为原来的类型
            ...
    //------------------------------------------------------------------------
    while(1)
    {
    if(WaitForSingleObject(pThis->m_hExitThread, 0) == WAIT_OBJECT_0)
    {
    ResetEvent(pThis->m_hExitThread);
    goto EXIT_THREAD_0;
    }
                    ...
    Sleep(30);
    }
    //------------------------------------------------------------------------
    EXIT_THREAD_0:
            ...
    SetEvent(pThis->m_hExitThreadOk);
    _endthreadex(0); return 0;
    }BOOL CRawThread::StartThread()
    {
    if(m_hThread == NULL){
    //如果线程没有启动,启动线程
    m_hThread = (HANDLE)_beginthreadex(
    NULL,
    0,
    _raw_thread_function, 
    this,  //这里传递参数 
    0,
    &m_uThreadId);
    return (m_hThread != NULL);
    }
    return TRUE;
    }void CRawThread::StopThread(DWORD dwWaitMillSecond /*= 500*/)
    {
    DWORD dwExitCode; if(m_hThread)
    {
    if(WaitForSingleObject(m_hExitThreadOk, 0) == WAIT_TIMEOUT)
    {
    SetEvent(m_hExitThread);
    WaitForSingleObject(m_hExitThreadOk, dwWaitMillSecond);
    GetExitCodeThread(m_hThread, &dwExitCode);
    if(dwExitCode == STILL_ACTIVE){
    TRACE1("Terminate RawThread 0x%x", m_hThread);
    TerminateThread(m_hThread, -1);
    }
    }
    CloseHandle(m_hThread);
    ClearThread();
    ResetEvent(m_hExitThreadOk);
    ResetEvent(m_hExitThread);
    }
    }