多线程加载图像

多线程
加载图像过慢时,可考虑使用多线程加载,速度提升的不是一般的快。
直接上代码:
int iThreadIndex = 0;
bool bHasThread = false;
int iThreadNum = 6;//根据自己需要修改
vector<CWinThread*> thread_Enc;
vector handle_Enc;

for(int i = 0; i < iThreadNum; i++ )
{
thread_Enc.push_back(NULL);
handle_Enc.push_back(NULL);
}

while( iThreadIndex < vec_files2.size() )
{
ImageData p;
p.image_num = iThreadIndex;
p.image_path = vec_files2;
for ( int i = 0; i < iThreadNum; i++ )
{
if ( thread_Enc[i] != NULL )
{
DWORD dwExitCode = 0;
GetExitCodeThread(handle_Enc[i], &dwExitCode);
if (dwExitCode != STILL_ACTIVE)
{
thread_Enc[i] = AfxBeginThread(ImageThread, &p );
handle_Enc[i] = thread_Enc[i]->m_hThread;
bHasThread = true;
break;
}
else
bHasThread = false;
}
else
{
thread_Enc[i] = AfxBeginThread(ImageThread, &p );
handle_Enc[i] = thread_Enc[i]->m_hThread;
bHasThread = true;
break;
}
}
if( bHasThread )
{
bHasThread = false;
iThreadIndex++;
pInfoBar->SetProgressPosition( iThreadIndex );
}

Sleep(10);

}

for ( int i = 0; i < iThreadNum/m_Thread_Num/; i++ )
{
if ( thread_Enc[i] != NULL )
{
DWORD dwExitCode = 0;
GetExitCodeThread(handle_Enc[i], &dwExitCode);
if (dwExitCode == STILL_ACTIVE)
{
WaitForSingleObject(handle_Enc[i], INFINITE);
continue;
}
}
}
其中
struct ImageData
{
int image_num;
vector image_path;
};
UINT ImageThread(LPVOID lpParameter)
{
ImageData* p = (ImageData*)lpParameter;
addDcmfile(p->image_path[p->image_num].c_str());
return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值