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; }
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(); }
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; }