📝 add maketimer_multi_coroutine_test(vm_num) in test/maketimer_sim.nas

This commit is contained in:
ValKmjolnir 2022-05-23 22:12:58 +08:00
parent 190014a3e5
commit 36a7868b0b
2 changed files with 47 additions and 6 deletions

View File

@ -7,6 +7,7 @@ nasal.exe:main.cpp nasal_ast.h nasal_err.h nasal_builtin.h nasal_opt.h nasal_cod
g++ -std=c++11 -O3 main.cpp -o nasal.exe -fno-exceptions -Wshadow -Wall -static
test:nasal
@ ./nasal -op -e test/ascii-art.nas
@ ./nasal -op -c test/auto_crash.nas
@ ./nasal -op -a -c test/bf.nas
@ ./nasal -op -a -c test/bfcolored.nas
@ ./nasal -op -a -c test/bfconvertor.nas
@ -27,6 +28,7 @@ test:nasal
@ ./nasal -op -e -d test/lexer.nas
@ ./nasal -op -e -d test/life.nas
@ ./nasal -op -t test/loop.nas
@ ./nasal -op -c test/maketimer_sim.nas
@ ./nasal -op -t -d test/mandel.nas
@ ./nasal -op -t -d test/mandelbrot.nas
@ ./nasal -op -t -d -o test/md5.nas

View File

@ -1,22 +1,30 @@
var process=nil;
var task={};
var event={};
var add_event=func(name,interval,function){
event[name]=coroutine.create(func{
unix.sleep(interval);
println("[event] ",name);
var timestamp=maketimestamp();
timestamp.stamp();
while(timestamp.elapsedMSec()<interval*1000)
coroutine.yield();
timestamp.stamp();
println("[\e[32m",name,"\e[0m] type:\e[33mevent\e[0m interval:\e[34m",interval,"\e[0m");
function();
});
}
var add_task=func(name,interval,function){
task[name]=coroutine.create(func{
var counter=0;
var timestamp=maketimestamp();
while(1){
unix.sleep(interval);
println("[task] ",name);
counter+=1;
timestamp.stamp();
while(timestamp.elapsedMSec()<interval*1000)
coroutine.yield();
timestamp.stamp();
println("[\e[32m",name,"\e[0m] type:\e[34mtask\e[0m interval:\e[34m",interval,"\e[0m invoke-time:\e[96m",counter,"\e[0m");
function();
coroutine.yield();
}
@ -85,3 +93,34 @@ var simulation=func(){
}
}
}
var maketimer_multi_coroutine_test=func(coroutine_size){
var task_vec=[];
setsize(task_vec,coroutine_size);
forindex(var i;task_vec)
task_vec[i]=func{};
task_vec[coroutine_size-1]=func(){
println("\e[101m",coroutine_size," tasks invoked.\e[0m");
}
var event_vec=[];
setsize(event_vec,coroutine_size);
forindex(var i;event_vec)
event_vec[i]=func{};
event_vec[coroutine_size-1]=func(){
println("\e[101m",coroutine_size," events invoked.\e[0m");
}
var timer=[];
setsize(timer,coroutine_size*2);
forindex(var i;task_vec){
timer[i]=maketimer((i+1)/5,task_vec[i]);
timer[i].start();
}
forindex(var i;event_vec){
timer[i+coroutine_size-1]=maketimer((i+1)/5,event_vec[i]);
timer[i+coroutine_size-1].singleShot=1;
timer[i+coroutine_size-1].start();
}
simulation();
}