HANDLE         m_RunSQL_Thread;
unsigned       m_RunSQL_ThreadId;//开始
void CSQLToolsDlg::OnBnClickedBcStart()
{
m_RunSQL_Thread = (HANDLE)_beginthreadex( NULL, 0, RunSQL , this, 0, &m_RunSQL_ThreadId );
if (NULL == m_RunSQL_Thread)
return;
}unsigned __stdcall CSQLToolsDlg::RunSQL( void * obj )
{
CSQLToolsDlg *dlg = (CSQLToolsDlg *)obj; //do something... return 0;
}//暂停
void CSQLToolsDlg::OnBnClickedBcStop()
{
//1.如何暂停线程?
}2.如何实现:当再点“开始”的时候,可以从上次暂停的地方开始继续?

解决方案 »

  1.   


    CWinThread::SuspendThreadDWORD SuspendThread( );返回值:
    如果成功,则返回线程原来的挂起计数值;否则返回0xFFFFFFFF。说明:
    增加当前线程的挂起计数。如果线程的挂起计数大于零,则该线程将不被执行。线程可以通过调用ResumeThread成员函数恢复执行。请参阅:
    CWinThread::ResumeThread, ::SuspendThread ----------------------------------------CWinThread::ResumeThreadDWORD ResumeThread( );返回值:
    如果成功,则返回线程的原挂起计数值;否则返回0xFFFFFFFF。如果返回值为零,则表示当前线程没有被挂起。如果返回值为1,线程被挂起,但是即将重新启动。任何大于1的返回值都表明线程将继续挂起。说明:
    调用这个函数以使被SuspendThread成员函数所挂起的线程恢复执行,或者使用CREATE_SUSPENDED标志创建的线程恢复执行。当前线程的挂起计数被减小1。如果挂起计数被减小到0,线程将恢复执行;否则线程继续被挂起。请参阅:
    CWinThread::SuspendThread, ::ResumeThread 
      

  2.   

    uses Waitforsingleobject to wait for an event
      

  3.   

    SuspendThread就能暂停线程,ResumeThread恢复
      

  4.   

    SuspendThread就能暂停线程,ResumeThread恢复 ;
    (但我以前用时遇到过有时候ResumeThread恢复不了的bug)
    ----------------------如果你的线程函数体是个循环,你也可以利用一个全局的标记量来暂停和恢复。
      

  5.   

    m_RunSQL_Thread->SuspendThread
    m_RunSQL_Thread->ResumeThread