Ejemplo n.º 1
0
ECode RequestHandlerThread::WaitUntilIdle()
{
    AutoPtr<IHandler> handler;
    WaitAndGetHandler((IHandler**)&handler);
    AutoPtr<ILooper> looper;
    handler->GetLooper((ILooper**)&looper);

    Boolean result;
    looper->IsIdling(&result);
    if (result) {
        return NOERROR;
    }
    mIdle->Close();
    AutoPtr<IMessageQueue> queue;
    looper->GetQueue((IMessageQueue**)&queue);
    queue->AddIdleHandler(mIdleHandler);
    // Ensure that the idle handler gets run even if the looper already went idle
    handler->SendEmptyMessage(MSG_POKE_IDLE_HANDLER, &result);
    looper->IsIdling(&result);
    if (result) {
        return NOERROR;
    }
    mIdle->Block();
    return NOERROR;
}