二、微信小游戏开发 多线程Worker

 

微信多线程Worker教程

微信多线程Worker API

 

一、创建Worker,并和当前线程通讯

多线程worker只能创建1个。能和当前线程互传数据。

 

 

创建worker

 在微信开发者工具中,在当前小游戏项目下创建worker代码文件,并在request下index.js中写一个发送和接收数据的代码

 

主线程中通worker通讯

在game.js中,创建worker,并写一个发送和接收数据的代码

 

 小游戏执行后输出

 

 

 二、Worker的用途

 暂未用到哎。没时间百度了...

 

转载于:https://www.cnblogs.com/gamedaybyday/p/9034501.html

多线程 求质数 返回数组中的最大值 bool isPrime(long x) { if (x <= 1) return false; if (x == 2) return true; for (long i = 2; i <= ceil(sqrt((long double)x));i++) if (x%i == 0) return false; return true; } DWORD WINAPI findPrime(void* p) { long result=0; int l = stc(p)->lower, u = stc(p)->uper; int t_id=GetCurrentThreadId(); for (int i = l; i <= u;i++) if (isPrime(i)) { result++; } DWORD dReturn = WaitForSingleObject(mutex_mul_result_h, INFINITE); mul_result += result; ReleaseMutex(mutex_mul_result_h); //EnterCriticalSection(&gCRITICAL_SECTION_Printf); //printf("%d,%d,%d,%d\n", l, u, result,t_id); //fflush(stdout); //LeaveCriticalSection(&gCRITICAL_SECTION_Printf); return 0; } //dispatcher void dispatch() { DWORD Status; timer tm; tm.start(); //srand(time(NULL)); long step = STEP;//ceil(double(TEST/10)); handlenum = 0; for (int i = 1; i <= TEST;) { i += step; handlenum++; } handle_array=new HANDLE[handlenum]; Thread_id = new DWORD[handlenum ]; arg = new FP_ARG[handlenum]; InitializeCriticalSection(&gCRITICAL_SECTION_Printf); mutex_mul_result_h = CreateMutex(NULL, false, mutex_mul_result); handlenum = 0; for (int i = 1; i <= TEST;) { arg[handlenum].lower = i; arg[handlenum].uper = (i + step-1>TEST) ? TEST : i + step-1; handle_array[handlenum]=(HANDLE)CreateThread(NULL, 0, findPrime, &arg[handlenum], 0, &Thread_id[handlenum]); /*EnterCriticalSection(&gCRITICAL_SECTION_Printf); printf("lower:%d uper:%d thread_id:%d\n", arg[handlenum].lower, arg[handlenum].uper,Thread_id[handlenum]); LeaveCriticalSection(&gCRITICAL_SECTION_Printf);*/ i += step; handlenum++; } tm.stop(); Sleep(1000); printf("there are %d threads\n", handlenum); printf("the multithreads use %f msc\n", tm.read()); } //the number of 1-1000000 Primenumber void s_finePrime() { timer tm; long result = 0; tm.start(); for (int i = 1; i <= TEST; i++) if (isPrime(i)) result++; tm.stop(); printf("Single thread result is %d\n", result); printf("Single thread use %f msc\n", tm.read()); } int _tmain(int argc, _TCHAR* argv[]) { dispatch(); WaitForMultipleObjects(handlenum, handle_array, true, INFINITE);//不起作用 printf("the multithreads reslut is %d\n", mul_result); CloseHandle(mutex_mul_result_h); DeleteCriticalSection(&gCRITICAL_SECTION_Printf); s_finePrime(); system("pause"); return 0; }
### 回答1: 以下是一个简单的微信小程序 Web Worker 示例: 首先,我们需要在小程序的根目录下创建一个 worker 目录,并在其中创建一个 worker.js 文件,代码如下: ```javascript // worker.js // 监听主线程发送的消息 onmessage = function (event) { console.log('worker received message:', event.data); // 模拟耗时操作 let sum = 0; for (let i = 0; i < 1000000000; i++) { sum += i; } // 向主线程发送消息 postMessage(sum); }; ``` 然后,在小程序页面中引入 worker.js,并创建一个 Worker 实例,代码如下: ```javascript // index.js Page({ onLoad: function () { // 创建一个 Worker 线程 const worker = wx.createWorker('worker.js'); // 向 Worker 线程发送消息 worker.postMessage('hello'); // 监听 Worker 线程发送的消息 worker.onMessage(function (event) { console.log('received message from worker:', event.data); }); }, }); ``` 在上面的示例中,我们创建了一个 Worker 线程并向其发送了一条消息。在 Worker 线程中模拟了一个耗时的计算任务,并将结果发送回主线程。在主线程中,我们监听了 Worker 线程发送的消息,并在控制台输出了结果。 需要注意的是,Worker 线程无法操作 DOM,也不能调用部分微信小程序 API。如果需要在 Worker 中使用某些 API,需要在主线程中通过 wx.getSharedCanvas() 方法获取一个共享的画布,并将画布传递给 Worker。 ### 回答2: 微信小程序中的多线程worker是一种用于实现后台并行处理的技术。通过使用多线程worker,我们可以在小程序中同时执行多个任务,提高程序的响应速度和用户体验。 多线程worker的一个经典案例是图片处理。在小程序中,如果需要对一张图片进行较复杂或耗时的处理,例如滤镜效果、裁剪、缩放等,直接在主线程中执行可能会导致界面卡顿。这时候就可以借助多线程worker来进行处理。 首先,我们可以在小程序中创建一个Worker对象,并传入一个执行脚本的文件路径。然后,我们可以通过消息监听和发送消息的方式与Worker进行通信。通过这种方式,我们可以将待处理的图片数据发送给Worker,并在Worker中进行处理。处理完成后,Worker将处理结果返回给主线程。 这样,通过将图片处理的任务交给Worker,主线程就能够立即响应用户的操作,避免了界面卡顿的问题。同时,由于Worker在独立的线程中执行,可以利用多核处理器的优势,提高图片处理的速度。 除了图片处理,多线程worker还可以应用于其他需要并行处理的场景,比如后台数据计算、复杂算法的执行等。通过将这些任务交给Worker处理,可以提高程序的性能和效率。 总之,微信小程序中的多线程worker提供了一种方便、高效的解决方案,可以帮助开发者实现并行处理和提高程序性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值