Subj : setInterval() and setTimeout() To : echicken From : Nightfox Date : Fri Feb 25 2022 09:05 am Re: setInterval() and setTimeout() By: echicken to Nightfox on Fri Feb 25 2022 06:09 am Ni>> setInterval() to have it run a function to do that at a regular Ni>> interval (while the user is still editing a message). But with the Ni>> behavior you describe, I'm not sure if that would be possible? ec> I don't think it's possible yet. ec> You're probably taking input from the user via console.getkey inside of a ec> loop. You may be doing this in a single main loop, or in several places. ec> Any such loop will block the script and prevent timers from running. ec> The solution would be to have your script define a bunch of functions, ec> etc., register a callback that gets fired when the user hits a key, and ec> then simply exit without blocking / looping. At this point everything ec> flows from your timers and input handler. Now your timers are free to run, ec> and won't be blocked except maybe briefly by your input callback. Unless ec> SlyEdit was designed in a very modular way, this probably means a huge ec> refactoring. Yeah, that would probably be a bit too much of a refactoring right now. I didn't know how Synchronet implements setInterval() or setTimeout() but I wondered if Synchronet may be starting a separate thread to wait and call your function, but it sounds like it's not implemented that way. ec> I'm using SlyEdit right now, and I noticed that if I pause for a minute, ec> the clock doesn't update until I hit a key. So I imagine you're using ec> console.getkey. Yeah, for each keypress, SlyEdit just checks the current time and if it's different from the displayed time, it will update the time on the screen. ec> Here's an easier solution to updating the clock on a ec> schedule: ec> load('event-timer.js'); ec> const t = new Timer(); ec> function updateClock() { ec> // do stuff here ec> } ec> function getKey() { ec> var k; ec> while (!k && !js.terminated) { ec> t.cycle(); ec> k = console.inkey(K_NONE, 25); ec> } ec> return k; ec> } ec> t.addEvent(1000, true, updateClock); ec> Obviously simplistic, but the idea would be to use the custom getKey ec> function as a drop-in replacement for console.getkey. Now you've got a ec> timer that will be allowed to run while you wait for user input. It looks like that would be a good solution. Nightfox --- þ Synchronet þ Digital Distortion: digitaldistortionbbs.com .