La question que vous posez dans le titre et celle que vous posez dans le corps sont différentes.
La façon standard pour un thread différent de savoir si un thread est toujours en cours est de l'attendre ou de l'interroger en utilisant is_running
et/ou is_joinable
en fonction de vos besoins particuliers.
Si tout ce que vous voulez c'est que le i'm done
soit imprimé, eh bien, assurez-vous que c'est la dernière instruction exécutée dans le corps du fil, et elle sera imprimée.
threads->create(sub {
# call the actual routine that does the work
print "i'm finished\n";
});