new Uint8Array(frame.data).filter((x,i)=>{return (i+1)%4!=0})
原理
利用ES6的新语法,filter()将每一个Uint8Array的Alpha通道的数值调成1就好了
做人咧,最紧要系开心🥳
new Uint8Array(frame.data).filter((x,i)=>{return (i+1)%4!=0})
利用ES6的新语法,filter()将每一个Uint8Array的Alpha通道的数值调成1就好了
《操作系统》课程最近布置了一个大作业,要求我们每人实现一个非抢占式多级反馈队列调度算法的模拟程序,作为期末考核的一部分。(u1s1,真的是爽到,老师开心,我们也写的开心!)
//Powered By 7gugu
//每一级队列的可运行时间
let timeSlice = [1, 2, 3];
//准备运行的队列
let preRunQueue = [];
//3级运行队列
let runQueue = [
[],
[],
[]
];
//准备运行的程序[开始时间, 运行时间]
let progs = [
[0, 8],
[1, 4],
[5, 1],
[3, 7],
[4, 2]
];
for (let i = 0; i < progs.length; i++) {
let prog = {};
prog.id = "P" + i;
prog.startTime = progs[i][0];
prog.runTime = progs[i][1];
prog.priority = 0; //设置最高优先级
preRunQueue.push(prog); //把待运行的程序导入运行序列
}
//总运行时间
let totalTime = 0;
while (true) {
//如果待运行队列中仍然有程序 & 程序已到达开始时间
if (preRunQueue.length > 0) {
let prog = preRunQueue[0];
if (prog.startTime <= totalTime) {
preRunQueue.shift(); //直接弹出队头的元素
runQueue[0].push(prog); //把程序加入0级运行队列中
console.log(prog.id + "开始运行,开始时间为:" + totalTime);
}
}
for (let i = 0; i < runQueue.length; i++) {
//如果各级队列还有程序的话,就继续运行
if (runQueue[i].length > 0) {
let prog = runQueue[i].shift(); //获取各级队列中第一个程序
if (prog.runTime > timeSlice[i]) {
//程序运行时间比时间片大
totalTime = totalTime + timeSlice[i]; //总运行时间累加
prog.runTime = prog.runTime - timeSlice[i]; //减去每一次运行的时间
if (i != runQueue.length - 1) {
//如果未处于最低优先级,则把程序放在下一个优先级队列中
runQueue[i + 1].push(prog);
} else {
//如果处于最低优先级,则把程序放回最低优先级中运行
runQueue[i].push(prog);
}
} else {
//程序运行时间比时间片小
totalTime = totalTime + prog.runTime;
console.log(prog.id + "运行完成,目前时间为:" + totalTime);
}
break;
}
}
}
计算机操作系统(第四版) 西安电子科技出版社
最近有空把之前想做的心率测量进行了开发和研究,最终选择了运动手环上面普遍采用的PPG式心率测量,载体则继续使用之前开发的”活力健身房”小程序。
PPG是通过光电手段在活体组织中检测血液容积变化的一种无创检测方法。
原理:血液会吸收光纤,心跳时血液流量会规律性变化,进而产生规律性变化,进而产生规律性的光信号。