workqueue.cpp

来自「ICE-3.2 一个开源的中间件」· C++ 代码 · 共 108 行

CPP
108 行
字号
// **********************************************************************//// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.//// This copy of Ice is licensed to you under the terms described in the// ICE_LICENSE file included in this distribution.//// **********************************************************************#include <WorkQueue.h>#include <Ice/LocalException.h>using namespace std;WorkQueue::WorkQueue() :    _done(false){}voidWorkQueue::run(){    IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);    while(!_done)    {        if(_callbacks.size() == 0)        {            _monitor.wait();        }        if(_callbacks.size() != 0)        {            //            // Get next work item.            //            CallbackEntry entry = _callbacks.front();            //            // Wait for the amount of time indicated in delay to             // emulate a process that takes a significant period of            // time to complete.            //            _monitor.timedWait(IceUtil::Time::milliSeconds(entry.delay));            if(!_done)            {                //                // Print greeting and send response.                //                _callbacks.pop_front();                cout << "Belated Hello World!" << endl;                entry.cb->ice_response();            }        }    }    //    // Throw exception for any outstanding requests.    //    list<CallbackEntry>::const_iterator p;    for(p = _callbacks.begin(); p != _callbacks.end(); ++p)    {        (*p).cb->ice_exception(Demo::RequestCanceledException());    }}void WorkQueue::add(const Demo::AMD_Hello_sayHelloPtr& cb, int delay){    IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);    if(!_done)    {        //        // Add work item.        //        CallbackEntry entry;        entry.cb = cb;        entry.delay = delay;        if(_callbacks.size() == 0)        {            _monitor.notify();        }        _callbacks.push_back(entry);    }    else    {        //        // Destroyed, throw exception.        //        cb->ice_exception(Demo::RequestCanceledException());    }}voidWorkQueue::destroy(){    IceUtil::Monitor<IceUtil::Mutex>::Lock lock(_monitor);    //    // Set done flag and notify.    //    _done = true;    _monitor.notify();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?