线程池 将任务push_back到list中的问题

今晚又失眠 2011-06-02 10:30:13
最近在用到线程池,于是在codeproject上找到一个(http://www.codeproject.com/KB/threads/win32threadpool.aspx)

用这个线程池有一个问题,代码如下:
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;

}
...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
今晚又失眠 2011-06-02
  • 打赏
  • 举报
回复
不知道我描述是否清晰,就是在这个函数体内,每次 push_back 都是保存最后一次的值。push_back几次,列表中就保存几个最后一次的值
oyljerry 2011-06-02
  • 打赏
  • 举报
回复
每次push以后,自己打印一下就知道是否成功了
今晚又失眠 2011-06-02
  • 打赏
  • 举报
回复
问题解决了,是自己在调用时出现疏忽。
今晚又失眠 2011-06-02
  • 打赏
  • 举报
回复
没有人知道吗?急啊

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧