firescript 发表于 2024-2-12 09:18

STL文件读取算法如何多线程?

本帖最后由 firescript 于 2024-2-12 10:10 编辑

```
      //读取STL文件
      float * STL_X = NULL;
      float * STL_Y = NULL;
      float * STL_Z = NULL;
      unsigned long STL_NB = 0;//STL_NB个点
      ReadSTLFile(pathName,STL_X,STL_Y,STL_Z,STL_NB);

      //记录STL_X/Y/Z中不重复的点为STL_New_X/Y/Z
      float * STL_New_X = new float;
      float * STL_New_Y = new float;
      float * STL_New_Z = new float;
      STL_New_X = STL_X;
      STL_New_Y = STL_Y;
      STL_New_Z = STL_Z;
      int STL_New_NB = 1;//第一个点肯定不重复

      //ioNoVertices记录STL_NB个点在STL_New_X/Y/Z中的索引
      int * ioNoVertices = new int;
      ioNoVertices = 1;//索引为1
      for (int i=1;i<STL_NB;i++)
      {
                CATBoolean isOK = CATTrue;
                for (int j=0;j<STL_New_NB;j++)
                {
                        if( (STL_X==STL_New_X) && (STL_Y==STL_New_Y) && (STL_Z==STL_New_Z) )
                        {
                              isOK = CATFalse;
                              ioNoVertices = j+1;
                              break;
                        }
                }
                if(isOK == CATTrue)
                {
                        STL_New_X = STL_X;
                        STL_New_Y = STL_Y;
                        STL_New_Z = STL_Z;
                        STL_New_NB++;
                        ioNoVertices = STL_New_NB;
                }
      }
```
请教这个算法如何多线程处理。

sai609 发表于 2024-2-12 09:57

导入常用库 然后

firescript 发表于 2024-2-12 10:00

sai609 发表于 2024-2-12 09:57
导入常用库 然后

能详细点说说么?
如果是使用PCL等三方库,有点屠龙刀杀牛的感觉

yes2 发表于 2024-2-12 13:08

没太明白。你说的是ReadSTLFile这个函数内部的实现要多线程吗?这个你也没有贴代码没法怎么提思路。
如果是后面的两个for循环要多线程的话,倒是可以试试。比如你要开4个线程,那就以STL_NB/4为分界,每个线程负责其中的1/4即可

firescript 发表于 2024-2-12 13:38

yes2 发表于 2024-2-12 13:08
没太明白。你说的是ReadSTLFile这个函数内部的实现要多线程吗?这个你也没有贴代码没法怎么提思路。
如果 ...就是下面那个循环需要多线程

问题是你这样划分,每个线程都要用到其它线程的值
STL_New_X/Y/Z在每个线程中都是增多的,而且它在每个线程中都要用来判断是否相同点。

firescript 发表于 2024-2-12 16:32

最后找了个利用哈希表的方法搞定了    也很快   不需要多线程
页: [1]
查看完整版本: STL文件读取算法如何多线程?