views:

63

answers:

2

Let's say I have 10 threads running simultaneously. Is there any way of calling some method when a thread finishes? I was thinking of something like:

$thread->onFinish(sub { print "I'm done"; });
+1  A: 

I'm really in the dark here, so it's just a general suggestion: you could implement a callback mechanism. If nothing else, you could pass an object with the onFinish method when the thread starts. And call that function from the thread when it finishes it's work (according to it's internal state).

Tamás Szelei
+5  A: 

The question you ask in the title and the one you ask in the body are different.

The standard way for a different thread to find out if a thread is still running is to either wait for it or poll it using is_running and/or is_joinable depending on your particular needs.

If all you want is for the i'm done to be printed, well, make sure that is the last statement executed in the thread body, and it will be printed.

threads->create(sub {
    # call the actual routine that does the work
    print "i'm finished\n";
});
Sinan Ünür