Is there any way to do something when a Perl thread finishes its work?

multithreading, perl

Solution

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";
});

Problem

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"; }); ```

Original source