子线程使用

相关库:

comlink
worker-loader
 
主线程:

import Worker from 'worker-loader!./worker.js';
import { Loader } from '@/utils/CWThree/Loader/Loader';
// 子线程加载模型
export async function loadModelInWorker(data) {
  return new Promise((resolve, reject) => {
    const worker = new Worker(); // 创建 Worker
    const loader = (a, b) => Loader(a, b);
    worker.postMessage({ sceneModelUrl: data?.sceneModelUrl, method: loader.toString() }); // 向 Worker 发送模型 URL

    worker.onmessage = (event) => {
      resolve({ ...data, model: event.data.model }); // 接收到 Worker 返回的数据(模型)
    };

    worker.onerror = (error) => {
      console.error('Worker encountered an error:', error);
      reject(error); // 捕获 Worker 错误
    };
  });
}

子线程:

// import { Loader } from '@/utils/CWThree/Loader/Loader';

// 监听主线程发来的消息
onmessage = function (e) {
  console.log(e, 'e');
  const { sceneModelUrl, method } = e.data; // 获取主线程传递的 URL
  // if (!Loader) return;
  try {
    postMessage({ model: 123 }); // 传回加载后的模型场景
  } catch (error) {
    // 如果发生错误,捕获并发送回主线程
    console.error('Error loading model:', error);
    postMessage({ error: error.message });
  }
};

comlink库可以简化子进程与主进程通信,稍后可做研究

posted @ 2025-03-26 17:58  SimoonJia  阅读(8)  评论(0)    收藏  举报