我正在使用ElectronJS制作一个从图像生成STL文件的应用程序,并且我正在使用OpenCV访问图像的每个像素的值。 Worker用于写入STL文件。我遇到的麻烦是,我在创建工作程序的文件(向工作程序发送消息的同一位置)或主进程中都没有收到消息。
以下是工作人员的创建:
let worker = new Worker('../workers/convertor.js')
这是工作人员的代码
onmessage = function (e) {
//Creating the write stream
let stream = fs.createWriteStream(e.data[1].split('.')[0] + '.stl', {flags: 'w'})
this.self.postMessage([50])
convert(stream, e.data[2])
self.close()
}
这就是我向工作人员发送消息的方式:
function convertFile() {
// Not converting if there is no file selected
if(filePath != null) {
// The mat for image analysis
let src = cv.imread('img-for-analysis', cv.IMREAD_GRAYSCALE)
// Variable to hold the pixel values of the image
let pixelValues = [...Array(src.rows)].map(e => Array(src.cols).fill(null))
//Storing the values of the pixels in the array
for(let i = 0; i < src.rows; i++) {
for (let j = 0; j < src.cols; j++) {
pixelValues[i][j] = src.ucharAt(i, j * src.channels())
}
}
worker.postMessage([filePath, fileName, pixelValues])
}
}
我已将这段代码放在main.js和在其中从以下位置发送/发送消息的js文件中:
onmessage = function(e) {
console.log(e)
}
代码的所有其他部分都可以使用,但是我在控制台中未收到任何响应。
我知道了。调用this.self.postmessage()正在向工作人员发布消息。我只需要简单地从worker调用postmessage()。在要接收消息的文件中,我将执行以下操作:
worker.onmessage = function (e) {
// Code
}