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:

  1. Change my $thread_gps = threads->new( \&gps);

    to threads->new( \&gps)->detach;

  2. and
    $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.


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."