in reply to GPS Widget
Does the device ever time out when you call ($ns,$lat,$ew,$lon) = $gps_device->get_position;?
Because if it does not, then the thread will never notice that $die has been set, which means when you call $thread_gps->join;, it will wait forever.
Since there is no return value from the thread, there is no point in waiting for it. So, just detach the thread and if the GPS device hangs, when you end the main thread, the gps thread will end too. (With a warning, which is okay since there was an error condition.)
Ie:
to threads->new( \&gps)->detach;
$window->signal_connect( delete_event=> sub { $die = 1; $thread_gps->join; Gtk2->main_quit } );
To
$window->signal_connect( delete_event=> sub { $die = 1; sleep 4; ## Give the thread a chance to end properly Gtk2->main_quit } );
That should ensure timely program termination even if the GPS device hangs and never times out.
|
|---|