user2141046
user2141046

Reputation: 902

Run loop in TCL shell background

I'm looking for a way to run a loop in TCL shell background (meaning - an infinite loop calling some function), but I can't find a way to do it.

The proc is a simple proc releasing all possible licenses from the user (we have a shortage of licenses here at work and we constantly fighting who's going to get them).

The loop itself is simple:

while {1} { 
      after 60000
      clr_lic
}

But how can I make it run in the background so I'll be able to run other commands as well?

Upvotes: 2

Views: 727

Answers (2)

Donal Fellows
Donal Fellows

Reputation: 137567

Are you running an event loop? If you are, you can do this with the every procedure:

proc every {ms script} {
    after $ms [info level 0]
    uplevel "#0" $script
    # Double quotes just for syntax highlighting…
}

every 60000 clr_lic

Otherwise, things get awkward: you'd have to think about spinning up a thread or a subprocess and… well, it all gets a lot more awkward as then you're in a strongly segregated context and have to do a lot more work (well, usually).


When testing the code above, I used this:

every 500 {
    puts "Hi there, world!"
}
vwait forever;  # Conventional way to run the event loop in tclsh

And I got quite a lot of messages written out; it's flexible and easy.

Upvotes: 2

vpenkoff
vpenkoff

Reputation: 15

Try appending an ampersand (&) when invoking your script. This will run it in background and you're be able to run any command you like.

Upvotes: -1

Related Questions