I created the following priority queue in C ++
priority_queue < ThreadInfo*, vector<ThreadInfo*>, CompareThread > thread_queue;
where is the class threadinfo
class ThreadInfo { public: ThreadInfo(); ThreadInfo(const ThreadInfo& orig); ThreadInfo(int thread_id,int init_time,int sleep_time,int run_time,int priority,int is_critical) { this->thread_id=thread_id; this->is_critical=is_critical; this->init_time=init_time; this->priority=priority; this->run_time=run_time; this->sleep_time=sleep_time; } void set_critical(bool value) { is_critical=value; } bool get_critical() { return is_critical; } void set_sleep_time(long value) { sleep_time=value; } long get_sleep_time(long value) { return sleep_time; } void set_run_time(long value) { sleep_time=value; } long get_run_time(long value) { return sleep_time; } int get_lock_type() { return lock_type; } void set_lock_type(int lock_type) { this->lock_type=lock_type; } int get_priority() { return priority; } void set_priority(int value) { this->priority=value; } unsigned long int get_thread_id() { return thread_id; } void set_thread_id(unsigned long int value) { this->thread_id=value; } virtual ~ThreadInfo(); private: unsigned long int thread_id; long init_time; long sleep_time; long run_time; int priority; bool is_critical;
and comparison class
class CompareThread { public: bool operator()(ThreadInfo* th1, ThreadInfo* th2) { if (th1->get_priority()>th2->get_priority()) return true; return false; } };
then I insert the element into the next function,
void ThreadScheduler::register_thread(ThreadInfo &th) { thread_queue.push(&th); }
I call the thread register from the following function,
int ThreadController::thread_register(pthread_t &t, int priority, bool critical) { ThreadInfo ti; cout<<"t reg:"<<t<<endl; ti.set_thread_id(t); ti.set_critical(critical); ti.set_priority(priority); ThreadScheduler::Instance()->register_thread(ti); }
but every time I click on some threadinfo object in the queue, I get the most recent object when I call thread_queue.top () whether it should return the thread object with the lowest priority. Are there any problems here?
source share