コード例 #1
0
void Scheduler::RemoveItem(boost::shared_ptr<Schedule> item)
{
	LOG_AM_TRACE("Entering function %s", __FUNCTION__);

	LOG_AM_DEBUG("Removing [Activity %llu]",
		item->GetActivity()->GetId());

	try {
		/* Do NOT attempt to get an iterator to an item that isn't in a
		 * container. */
		if (item->m_queueItem.is_linked()) {
			bool updateWake = false;

			/* If the item is at the head of either queue, the time might
			 * have changed.  Otherwise, it definitely didn't. */
			if (item->IsLocal()) {
				if (m_localQueue.iterator_to(*item) == m_localQueue.begin()) {
					updateWake = true;
				}
			} else {
				if (m_queue.iterator_to(*item) == m_queue.begin()) {
					updateWake = true;
				}
			}

			item->m_queueItem.unlink();

			if (updateWake) {
				DequeueAndUpdateTimeout();
			}
		}
	} catch (...) {
	}
}
コード例 #2
0
void Scheduler::AddItem(boost::shared_ptr<Schedule> item)
{
	LOG_AM_TRACE("Entering function %s", __FUNCTION__);

	LOG_AM_DEBUG(
		"Adding [Activity %llu] to start at %llu (%s)",
		item->GetActivity()->GetId(),
		(unsigned long long)item->GetNextStartTime(),
		TimeToString(item->GetNextStartTime(), !item->IsLocal()).c_str());

	bool updateWake = false;

	if (item->IsLocal()) {
		m_localQueue.insert(*item);

		if (m_localQueue.iterator_to(*item) == m_localQueue.begin()) {
			updateWake = true;
		}
	} else {
		m_queue.insert(*item);

		if (m_queue.iterator_to(*item) == m_queue.begin()) {
			updateWake = true;
		}
	}

	if (updateWake) {
		DequeueAndUpdateTimeout();
	}
}