In Sketchup2024, the timer is no longer waiting for the main thread code to finish executing, and the timer execution is advanced.
I hope that my cache data is always valid during code execution, and the timer mechanism can just realize automatic cleaning.
def self.once_exec(k)
@timer ||= {}
unless @timer[k]
puts "\ncreate #{k} #{Time.now}\n"
@timer[k] ||= UI.start_timer(0.001, false) {
UI.stop_timer(@timer[k])
@timer[k] = nil
puts "\nfree #{k} #{Time.now}\n"
}
end
end
%w[11 22 33 33 22 11].each do |k|
once_exec(k)
sleep(1)
end
sleep(2)
sketchup 2022 output
create 11 2025-03-21 09:09:50 +0800
create 22 2025-03-21 09:09:51 +0800
create 33 2025-03-21 09:09:52 +0800
=> 2
free 11 2025-03-21 09:09:58 +0800
free 22 2025-03-21 09:09:58 +0800
free 33 2025-03-21 09:09:58 +0800
sketchup 2024 output
create 11 2025-03-21 09:09:25 +0800
create 22 2025-03-21 09:09:26 +0800
free 11 2025-03-21 09:09:26 +0800
create 33 2025-03-21 09:09:27 +0800
free 22 2025-03-21 09:09:27 +0800
create 22 2025-03-21 09:09:29 +0800
free 33 2025-03-21 09:09:29 +0800
create 11 2025-03-21 09:09:30 +0800
free 22 2025-03-21 09:09:30 +0800
=> 2
free 11 2025-03-21 09:09:33 +0800