for循环改成多线程

时间:2021-12-24 20:26:08
list<DD>::iterator it = m_dd.begin();
    for (; it != m_dd.end(); it++)
    {
        it->Fun();
 
    }


如果Fun是一个比较耗时的函数,怎么改造成多线程,让循环体内每个对象都能同步运行,不像for循环一样顺序执行。

7 个解决方案

#1


改成多线程不费时?

 it++改成++it!

#2


定时器,简单些 

#3


引用 1 楼 sha_jinhao 的回复:
改成多线程不费时?

 it++改成++it!


这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。

#4


引用 2 楼 lgstudyvc 的回复:
定时器,简单些


这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。

#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;
}

#6


引用 3 楼 AfterSeptember 的回复:
引用 1 楼 sha_jinhao 的回复:
改成多线程不费时?

 it++改成++it!

这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。


每个对象开个定时器,完毕后,kill掉;没启动时就自己在那儿定时启动
这样你定时器去执行同一个功能,莫啥问题

#7


用openmp 会自动用多线程循环展开

#1


改成多线程不费时?

 it++改成++it!

#2


定时器,简单些 

#3


引用 1 楼 sha_jinhao 的回复:
改成多线程不费时?

 it++改成++it!


这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。

#4


引用 2 楼 lgstudyvc 的回复:
定时器,简单些


这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。

#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;
}

#6


引用 3 楼 AfterSeptember 的回复:
引用 1 楼 sha_jinhao 的回复:
改成多线程不费时?

 it++改成++it!

这段代码放在一个定时器中的,如果运行时间太长,定时时间太短,不就会有问题啊。


每个对象开个定时器,完毕后,kill掉;没启动时就自己在那儿定时启动
这样你定时器去执行同一个功能,莫啥问题

#7


用openmp 会自动用多线程循环展开