feat: update epoch interuppt

This commit is contained in:
2023-01-19 00:45:26 +08:00
parent c173ce8dba
commit 6e4277a53b

View File

@@ -1,3 +1,7 @@
use std::io::{stdout, Write};
use std::thread;
use std::time::Duration;
use anyhow::Result; use anyhow::Result;
use wasmtime::*; use wasmtime::*;
@@ -17,19 +21,42 @@ fn main() -> Result<()> {
let linker = Linker::new(&engine); let linker = Linker::new(&engine);
let mut store = Store::new(&engine, 4); let mut store = Store::new(&engine, 4);
store.set_epoch_deadline(10); store.set_epoch_deadline(10);
store.epoch_deadline_trap();
// store.epoch_deadline_callback(|a /*store -> data*/| {
// println!("!epoch_deadline_callback! -- {}", a);
// //Ok(1)
// Err(anyhow::anyhow!("error"))
// });
thread::spawn(move || {
for _ in 0.. {
thread::sleep(Duration::from_millis(100));
print!(":");
stdout().flush().ok();
engine.increment_epoch();
}
});
let instance = linker.instantiate(&mut store, &module)?; let instance = linker.instantiate(&mut store, &module)?;
let hello = instance.get_typed_func::<(i32, i32), i32>(&mut store, "add")?; let hello = instance.get_typed_func::<(i32, i32), i32>(&mut store, "add")?;
// let hello2 = instance.get_typed_func::<(&str, i32), i32, _>(&mut store, "add")?; // let hello2 = instance.get_typed_func::<(&str, i32), i32, _>(&mut store, "add")?;
store.add_fuel(10_000_u64).ok(); store.add_fuel(1000_000_000_u64).ok();
println!("1 + 2 = {:?}", hello.call(&mut store, (1, 2))?); println!("1 + 2 = {:?}", hello.call(&mut store, (1, 2))?);
println!("Fuel consumed: {:?}", store.fuel_consumed()); println!("Fuel consumed: {:?}", store.fuel_consumed());
println!("2 + 3 = {:?}", hello.call(&mut store, (2, 3))?); println!("2 + 3 = {:?}", hello.call(&mut store, (2, 3))?);
println!("Fuel consumed: {:?}", store.fuel_consumed()); println!("Fuel consumed: {:?}", store.fuel_consumed());
for i in 0..100000000 {
if i % 10000 == 0 {
print!(".");
stdout().flush().ok();
}
hello.call(&mut store, (1, 2))?;
}
Ok(()) Ok(())
} }