UINT SendMailMulti(LPVOID pParam)//我的线程
{
...
return true;
}AfxBeginThread(SendMailMulti, this);//开始线程void CMDMView::OnStopBtn()  //停止线程(按钮)
{}void CMDMView::OnPauseBtn() //暂停和继续(按钮)
{}
问:OnStopBtn() 和 OnPauseBtn()  应该怎么写?

解决方案 »

  1.   

    暂停
    SuspendThread()
    继续
    ResumeThread()_beginThreadex()
    _endthreadex()
      

  2.   

    http://blog.csdn.net/benny5609/archive/2008/03/28/2225045.aspx
    http://blog.csdn.net/benny5609/archive/2008/03/28/2225049.aspx
      

  3.   

    CWinThread* m_pThread=AfxBeginThread(SendMailMulti, this);//开始线程 m_pThread->SuspendThread();
    m_pThread->ResumeThread();
    定义在CMDMView里面了。
     
      

  4.   

    HANDLE m_event_pause;
    HANDLE m_event_stop;BOOL CXXXDlg::OnInitDialog()
    {
    ...
    m_event_pause = NULL;
    m_event_stop = NULL;
    ...
    }DWORD WINAPI CXxxDlg::ThreadProc(LPVOID lpParameter)
    {
    CXxxDlg* pDlg = (CXxxDlg*)lpParameter;
    int i = 0;
    while(true)
    { if(WAIT_OBJECT_0 == WaitForSingleObject(pDlg->m_event_pause, INFINITE))
    SetEvent(pDlg->m_event_pause);

    if(WAIT_OBJECT_0 == WaitForSingleObject(pDlg->m_event_stop, WAIT_OBJECT_0))
    SetEvent(pDlg->m_event_stop);
    else
    break;


    pDlg->SetDlgItemInt(IDC_EDIT1, i);
    i++;
    Sleep(10);
    }
    AfxMessageBox("线程即将退出");
    return 0;
    }void CXxxDlg::OnStart() 
    {
    if(GetDlgItemInt(IDC_EDIT1)>0)
    return; SetEvent(m_event_pause);
    SetEvent(m_event_stop);
    DWORD dwTheadID = 0;
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc, this, NULL, &dwTheadID);
    m_event_pause = CreateEvent(NULL, FALSE, TRUE, "");
    m_event_stop = CreateEvent(NULL, FALSE, TRUE, "");
    CloseHandle(hThread);
    }void CXxxDlg::OnPause() 
    {
    ResetEvent(m_event_pause);
    }void CXxxDlg::OnStop() 
    {
    SetEvent(m_event_pause);
    ResetEvent(m_event_stop);
    SetDlgItemInt(IDC_EDIT1, 0);
    }void CXxxDlg::OnResume() 
    {
    SetEvent(m_event_pause);
    }