예제 #1
0
	void CommandQueue::AcceptCommand(const T& arType, size_t aIndex, std::queue<T>& arQueue, int aSequence, IResponseAcceptor* apRspAcceptor)
	{ 
		{
			apl::CriticalSection cs(&mLock);
			arQueue.push(arType);
			mTypeQueue.push(CommandData(arType.GetType(), aIndex, aSequence, apRspAcceptor));
		}
		if(mpNotifier != NULL) mpNotifier->Notify();
	}
void NetworkInterfaceImpl::startCommand(const TaskExecutor::CallbackHandle& cbHandle,
                                        const RemoteCommandRequest& request,
                                        const RemoteCommandCompletionFn& onFinish) {
    LOG(2) << "Scheduling " << request.cmdObj.firstElementFieldName() << " to " << request.target;
    stdx::lock_guard<stdx::mutex> lk(_mutex);
    _pending.push_back(CommandData());
    CommandData& cd = _pending.back();
    cd.cbHandle = cbHandle;
    cd.request = request;
    cd.onFinish = onFinish;
    fassert(28730, _pool.schedule([this]() -> void { _runOneCommand(); }));
}