list<DD>::iterator it = m_dd.begin();
for (; it != m_dd.end(); it++)
{
it->Fun();
}
如果Fun是一个比较耗时的函数,怎么改造成多线程,让循环体内每个对象都能同步运行,不像for循环一样顺序执行。
7 个解决方案
#1
改成多线程不费时?
it++改成++it!
it++改成++it!
#2
定时器,简单些
#3
这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。
#4
这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。
#5
如果数量不多可以下面方式:
list<DD>::iterator it = m_dd.begin();
for (; it != m_dd.end(); it++)
{
HANDLE Thread = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Test,it,0,&dwID);// 创建线程,并将it作为参数传入线程
}
DWORD WINAPI Thread_Test(LPVOID wParam)
{
iterator *it = (iterator *)wParam;
if(it) it->Fun();
return 0;
}
list<DD>::iterator it = m_dd.begin();
for (; it != m_dd.end(); it++)
{
HANDLE Thread = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Test,it,0,&dwID);// 创建线程,并将it作为参数传入线程
}
DWORD WINAPI Thread_Test(LPVOID wParam)
{
iterator *it = (iterator *)wParam;
if(it) it->Fun();
return 0;
}
#6
每个对象开个定时器,完毕后,kill掉;没启动时就自己在那儿定时启动
这样你定时器去执行同一个功能,莫啥问题
#7
用openmp 会自动用多线程循环展开
#1
改成多线程不费时?
it++改成++it!
it++改成++it!
#2
定时器,简单些
#3
这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。
#4
这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。
#5
如果数量不多可以下面方式:
list<DD>::iterator it = m_dd.begin();
for (; it != m_dd.end(); it++)
{
HANDLE Thread = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Test,it,0,&dwID);// 创建线程,并将it作为参数传入线程
}
DWORD WINAPI Thread_Test(LPVOID wParam)
{
iterator *it = (iterator *)wParam;
if(it) it->Fun();
return 0;
}
list<DD>::iterator it = m_dd.begin();
for (; it != m_dd.end(); it++)
{
HANDLE Thread = ::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread_Test,it,0,&dwID);// 创建线程,并将it作为参数传入线程
}
DWORD WINAPI Thread_Test(LPVOID wParam)
{
iterator *it = (iterator *)wParam;
if(it) it->Fun();
return 0;
}
#6
每个对象开个定时器,完毕后,kill掉;没启动时就自己在那儿定时启动
这样你定时器去执行同一个功能,莫啥问题
#7
用openmp 会自动用多线程循环展开