15,471
社区成员
发帖
与我相关
我的任务
分享
void ThreadPool::AddJobToQueue(
LPTHREAD_START_ROUTINE pFunc, LPVOID pData,
IRunObject* runObject, ThreadPriority priority)
{
nTime++;
assert(pFunc != NULL || runObject != NULL);
JobData jobData;
jobData.lpStartAddress = pFunc;
jobData.pData = pData;
jobData.runObject = runObject;
// add it to the list
EnterCriticalSection(&m_cs);
{
if (priority == Low)
m_jobList.push_back(jobData);// 这一行,当所有的线程都busy的时候,将任务加入队列,
else // 可是队列中总是保存最后一次的值,而且是push_back几次,
m_jobList.push_front(jobData); // 队列中就有几个最后一次的值
#ifdef _DEBUG
JobList::iterator it;
for (it = m_jobList.begin(); it != m_jobList.end(); it++)
{
TRACE((char *)it->pData);
TRACE("\r\n");
}
#endif
// See if any threads are free
for (ThreadList::iterator iter = m_threads.begin(); iter != m_threads.end(); ++iter)
{
if (WaitForSingleObject(iter->hWait, 0) == WAIT_TIMEOUT)
{
// here is a free thread, wake it up
SetEvent(iter->hWait);
break;
}
}
}
LeaveCriticalSection(&m_cs);
//定义如下
struct JobData
{
LPTHREAD_START_ROUTINE lpStartAddress;
LPVOID pData;
IRunObject* runObject;
};
typedef std::list<JobData, std::allocator<JobData> > JobList;
JobList m_jobList;
}