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
导入常用库 然后
能详细点说说么?
如果是使用PCL等三方库,有点屠龙刀杀牛的感觉 没太明白。你说的是ReadSTLFile这个函数内部的实现要多线程吗?这个你也没有贴代码没法怎么提思路。
如果是后面的两个for循环要多线程的话,倒是可以试试。比如你要开4个线程,那就以STL_NB/4为分界,每个线程负责其中的1/4即可 yes2 发表于 2024-2-12 13:08
没太明白。你说的是ReadSTLFile这个函数内部的实现要多线程吗?这个你也没有贴代码没法怎么提思路。
如果 ...就是下面那个循环需要多线程
问题是你这样划分,每个线程都要用到其它线程的值
STL_New_X/Y/Z在每个线程中都是增多的,而且它在每个线程中都要用来判断是否相同点。 最后找了个利用哈希表的方法搞定了 也很快 不需要多线程
页:
[1]