这是定义了一个线程安全的队列,使用信号量控制数据的访问,同时也指明了队列中可用数据的个数。
class QThreadSelfQueue
{
public:
QThreadSelfQueue(){}
void push(T * p){
m_semaphore.release();
m_list.push_back(p);
}
T* pop(int timeout = -1){
if(m_semaphore.tryAcquire(1,timeout))
return m_list.dequeue();
return NULL;
}
private:
QSemaphore m_semaphore;
QQueue<T*> m_list;
};
这是一个扩展的线程对象,目的是将线程的run方法扩展到一个对象的内部run方法中,使用聚合的方式构建线程对象。
class QThreadT : public QThread
{
public:
QThreadT(T * pObj):m_Obj(pObj){}
protected:
virtual void run(){
if(m_Obj)m_Obj->run();
}
private:
T * m_Obj;
};