#!/usr/bin/perl-thread -w # TITLE: Thread sample # REQUIRES: Gtk use Gtk; use Thread; init Gtk; $yeas_or_no = 1; $die = 0; $window = new Gtk::Window; $window->signal_connect('destroy', sub {Gtk->main_quit()}); $window->set_border_width(10); $label = new Gtk::Label("And now for something completely different ..."); $window->add($label); $label->show; $window->show; new Thread \&argument_thread, $label, 1; new Thread \&argument_thread, $label, 0; Gtk::Gdk->threads_enter; Gtk->main(); $die = 1; Gtk::Gdk->threads_leave; sub argument_thread { my ($label, $what) = @_; my ($say_something); while (!$die) { sleep(int(rand(3)+0.5)); { # scope for lock lock $yeas_or_no; $say_something = $what != $yeas_or_no; $yeas_or_no = $what if $say_something; } if ($say_something) { Gtk::Gdk->threads_enter(); $label->set($what?"o yes, it is!":"O no, it isn't!"); Gtk::Gdk->threads_leave(); } } }