Exemple #1
0
void View::on_update(const WritableLock& lock)
{
	lock.check_write(get_local_mutex());

	/* Schedule the background job for the view */
	if (update_interval_ > 0)
		JOB_QUEUE->enqueue(JobPtr(new ViewUpdateJob(JOB_QUEUE, boost::get_system_time() + boost::posix_time::seconds(update_interval_), name_)));
}
JobHandle
MandelbrotTileProvider::request_tile(int scale, const Vector2i& pos, 
                                     const std::function<void (Tile)>& callback)
{
  //std::cout << "MandelbrotTileProvider::request_tile(): " << scale << " " << pos << std::endl;
  JobHandle job_handle = JobHandle::create();
  m_job_manager.request(JobPtr(new MandelbrotTileJob(job_handle, m_size, scale, pos, callback)));
  return job_handle;
}
Exemple #3
0
JobPtr Peer::GetJob(int peerId, int taskId, PeerNodePtr pNode)
{
	std::map<int, JobPtr>::iterator it;
	for(it = m_jobList.begin(); it != m_jobList.end(); it++) {
		JobPtr pJob = (*it).second;
		if(pJob->GetTaskId() == taskId && pJob->GetRemotePeerId() == peerId)
			if(pNode == NULL)
				return pJob;
			else if(pNode == pJob->GetPeerNode())
				return pJob;
	}
	return JobPtr();
}
Exemple #4
0
JobPtr JobQueue::dequeue()
{
	logger_->debug("dequeuing job to thread " + boost::lexical_cast<std::string>(boost::this_thread::get_id()));

	boost::unique_lock<boost::mutex> lock(queue_mutex_);

	if (is_stopping_)
		JobPtr();

	while (!is_stopping_ && (queue_.empty() || boost::get_system_time() < (*queue_.begin())->get_deadline()))
	{
		if (queue_.empty())
			queue_cond_.wait(lock);
		else
			queue_cond_.timed_wait(lock, (*queue_.begin())->get_deadline());
	}

	if (is_stopping_)
		return JobPtr();

	JobPtr result = *queue_.begin();
	queue_.erase(queue_.begin());
	return result;
}