现有两个函数a和b,a和b如果是没有线程必须是a执行完后再执行b。现在是a里面有一个while循环有100次,我现在是要在a里的循环执行了20此后挂起再执行b,怎么办,能给出具体的代码么,谢谢!!!!!!!!!!!

解决方案 »

  1.   

    class CAsyncEventWaiter  
    {
    public:
    CAsyncEventWaiter();
    virtual ~CAsyncEventWaiter();
    void SetAsyncEvent( HRESULT hrAsync );
        void WaitForEvent( DWORD msMaxWaitTime = INFINITE, HANDLE hEvent=NULL );
    //void SetAsyncEvent();
    void ResetAsyncEvent();
    HRESULT GetAsyncEventResult()const{return m_hrAsync;}
    private:
    //sync 
    CEvent m_AsyncEvent;          // event handle
    HRESULT m_hrAsync;              // HRESULT during async operations};
    CAsyncEventWaiter::CAsyncEventWaiter()
    {
    m_hrAsync = S_OK;
    }CAsyncEventWaiter::~CAsyncEventWaiter()
    {}
    void CAsyncEventWaiter::ResetAsyncEvent()
    {
    m_AsyncEvent.ResetEvent();
    }
    void CAsyncEventWaiter::SetAsyncEvent( HRESULT hrAsync )
    {
    m_hrAsync = hrAsync;
    m_AsyncEvent.SetEvent(  );
    }
    void CAsyncEventWaiter::WaitForEvent(DWORD msMaxWaitTime, HANDLE hEvent)
    {
    if(hEvent==NULL)
    hEvent=m_AsyncEvent;
        DWORD   i;
    MSG     msg;
    TRACE("WaitForEvent %d Begin\r\n",msMaxWaitTime);
        for( i = 0; i < msMaxWaitTime; i += 10 ){
            if( PeekMessage( &msg, ( HWND ) NULL, 0, 0, PM_REMOVE ) ){
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            if( WAIT_TIMEOUT != WaitForSingleObject( hEvent, 10 ) ){
                break;
            }
        }
    if(i ==msMaxWaitTime){
    TRACE("WaitForEvent Abandoned\r\n");
    }
    else
    TRACE("WaitForEvent End\r\n");
    return;
    }在一个线程中调用WaitForEvent,可以等待到在另外一个线程中调用SetAsyncEvent,或者等待超时。注意WaitForEvent之前先调用ResetAsyncEvent。
      

  2.   

    谢谢 aiirii,也祝大家新年快乐,我来试试看