예제 #1
0
	//************************************************************
	//********功能:向线程池提交工作对象
	//********做法:若线程池中有空闲线程则立即给该工作给配线程并通知处理,否则进行线程池扩容或将工作根据优先级压入相应的工作队列: 高/普通工作队列
	//********参数:工作对象shared_ptr指针
	//********返回值:无
	//************************************************************
	bool CRealThreadPool::SubmitJob(shared_ptr<CJob>& job)//提交一个工作
	{
		if (m_IdleThread.isEmpty())//空闲线程栈为空
		{
			if (m_ThreadNum >= m_maxThreadNum)//当前线程数大于等于最大线程数,将工作压入工作队列
			{
				if (job->GetJobPri() == ThreadPriority::Normal)
					m_NormalJob.pushJob(job);//压入普通工作队列
				else
					m_HighJob.pushJob(job);//压入高优先级工作队列
				return true;
			}
			else
			{
				IncreaseCapacity();//扩容
			}
		}
		CRealThread* pThread=m_IdleThread.pop();//从空闲栈取出
		if (pThread == NULL)return false;

		m_ActiveThread.addThread(pThread);//放入活动链表
		pThread->AssignJob(job);//分配任务
		pThread->notifyStartJob();//开始做任务

		return true;
	}
예제 #2
0
 void Vector::InsertAt(int index, Object *o) {
   CheckIndex(index);
   if (curSize == curCap)
     IncreaseCapacity();
   for (int i = curSize; i > index; i--) { // shift elements right
     elements[i] = elements[i - 1];
   } // for
   elements[index] = o;
   curSize++;
 } // Vector::InsertAt
예제 #3
0
char* ByteBuffer::GetBuffer(int size){
	pthread_mutex_lock(_mutex);
	if(_used+size>_capacity){
		int tmp = _capacity;
		while(tmp<_used+size)
			tmp*=2;
		IncreaseCapacity(tmp);
	}
	char* result = _buffer+_used;
	_used+=size;
	pthread_mutex_unlock(_mutex);
	return result;
}
예제 #4
0
 void Vector::Add(Object *o) {
   if (curSize == curCap)  // vector is full
     IncreaseCapacity();
   elements[curSize] = o;
   curSize++;
 } // Vector::Add