怎样利用多线程提高运行速度

yejunjobs 2013-08-26 04:49:30
我利用两个线程分别读取50幅图像,然后进行处理,可是总的运行时间跟单线程差不多,以前没用过,望大家指导!!
CWinThread *pThread1=AfxBeginThread(ThreadProc1,
NULL,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);

CWinThread *pThread2=AfxBeginThread(ThreadProc2,
NULL,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);

pThread1->m_bAutoDelete = FALSE;
pThread2->m_bAutoDelete = FALSE;
HANDLE hThread1 = pThread1->m_hThread;
HANDLE hThread2 = pThread2->m_hThread;
pThread1->ResumeThread();
pThread2->ResumeThread();
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
CloseHandle(hThread1);
CloseHandle(hThread2);
//delete pThread1;
pThread1 = NULL;
//delete pThread2;
pThread2 = NULL;
/**下面是显示图像部分**/
显示图像
/**下面是显示图像部分end**/

两个线程函数如下,功能一样
UINT ThreadProc1(LPVOID pParam)
{
//CmyfacematchDlg* pDlg = (CmyfacematchDlg*)pParam;
IplImage * dataBaseImage;
//critical_section.Lock();
for (int count=1;count<=100;count+=2)
{
char img_name[100];
sprintf_s(img_name,"..\\outPut\\%d.jpg",count);
dataBaseImage=cvLoadImage(img_name,0);
/**图像处理函数**/
}
//critical_section.Unlock();
cvReleaseImage(&dataBaseImage);

return 0;
}

UINT ThreadProc2(LPVOID pParam)
{
//CmyfacematchDlg* pDlg = (CmyfacematchDlg*)pParam;
IplImage * dataBaseImage;
//critical_section.Lock();
for (int count=2;count<=100;count+=2)
{
char img_name[100];
sprintf_s(img_name,"..\\outPut\\%d.jpg",count);
dataBaseImage=cvLoadImage(img_name,0);
/**图像处理函数**/
}
//critical_section.Unlock();
cvReleaseImage(&dataBaseImage);

return 0;
}
...全文
463 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
青松2 2013-08-27
  • 打赏
  • 举报
回复
OPENMP
无言猪 2013-08-27
  • 打赏
  • 举报
回复
多线程的优势在有任务等待数据时,别的任务能同时工作,也就是充分利用CPU.按你所说,读取没有速度问题,读取过来后任务就一直处于忙状态,CPU一直在忙,除非是多核,并且支持进程内不同任务在不同的CPU上运行,多任务才有用处.不然CPU就一个,你无论怎么切,效率也提不高,反而是增加了任务切换的开销.
yejunjobs 2013-08-27
  • 打赏
  • 举报
回复
没有人告诉我该怎样加快运行速度吗
昨夜无风 2013-08-26
  • 打赏
  • 举报
回复
是不是两个线程做了同步?如果处理很耗时,多线程肯定有优势啊!
yejunjobs 2013-08-26
  • 打赏
  • 举报
回复
引用
读取的话,我觉得还跟硬盘的读取速度有关,但是如果说读取后处理的话,那肯定是多线程会好些的
读取很快的,关键是图像处理部分很慢……
yejunjobs 2013-08-26
  • 打赏
  • 举报
回复
引用
多线程并不是说一定能提高性能,它只是为了多任务处理等,让你的界面不要被耗时操作所阻塞
那我该怎样实时得到处理结果呢
oyljerry 2013-08-26
  • 打赏
  • 举报
回复
多线程并不是说一定能提高性能,它只是为了多任务处理等,让你的界面不要被耗时操作所阻塞
fishion 2013-08-26
  • 打赏
  • 举报
回复
读取的话,我觉得还跟硬盘的读取速度有关,但是如果说读取后处理的话,那肯定是多线程会好些的

15,471

社区成员

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

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