吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 380|回复: 5
收起左侧

[求助] STL文件读取算法如何多线程?

[复制链接]
firescript 发表于 2024-2-12 09:18
本帖最后由 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[STL_NB];
        float * STL_New_Y = new float[STL_NB];
        float * STL_New_Z = new float[STL_NB];
        STL_New_X[0] = STL_X[0];
        STL_New_Y[0] = STL_Y[0];
        STL_New_Z[0] = STL_Z[0];
        int STL_New_NB = 1;  //第一个点肯定不重复

        //ioNoVertices记录STL_NB个点在STL_New_X/Y/Z中的索引
        int * ioNoVertices = new int[STL_NB];
        ioNoVertices[0] = 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[i]==STL_New_X[j]) && (STL_Y[i]==STL_New_Y[j]) && (STL_Z[i]==STL_New_Z[j]) )
                        {
                                isOK = CATFalse;
                                ioNoVertices[i] = j+1;
                                break;
                        }
                }
                if(isOK == CATTrue)
                {
                        STL_New_X[STL_New_NB] = STL_X[i];
                        STL_New_Y[STL_New_NB] = STL_Y[i];
                        STL_New_Z[STL_New_NB] = STL_Z[i];
                        STL_New_NB++;
                        ioNoVertices[i] = 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
最后找了个利用哈希表的方法搞定了    也很快   不需要多线程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 15:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表