File: 17_thread_evt.t

package info (click to toggle)
libwx-perl 1%3A0.9909-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 3,912 kB
  • sloc: cpp: 9,728; perl: 8,182; ansic: 626; makefile: 41
file content (60 lines) | stat: -rwxr-xr-x 1,280 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl -w

use strict;
use Config;
use if !$Config{useithreads} => 'Test::More' => skip_all => 'no threads';
use threads;
use threads::shared;

use Wx;
use if !Wx::wxTHREADS(), 'Test::More' => skip_all => 'No thread support';
use if Wx::wxVERSION < 2.006, 'Test::More' => skip_all => 'Hangs under 2.5';
use Test::More tests => 2;

{
    package MyFrame;

    use base 'Wx::Frame';
}

my $app = Wx::App->new( sub { 1 } );
my $frame = MyFrame->new( undef, -1, 'Test' );
my $timer = Wx::Timer->new( $frame );

my $TEST_DONE_EVENT : shared = Wx::NewEventType;

# avoid use()ing Wx::Event on purpose
Wx::Event::EVT_COMMAND( $frame, -1, $TEST_DONE_EVENT, \&got_thread_event );
Wx::Event::EVT_TIMER( $frame, -1, \&got_timer_event );

$timer->Start( 800, 1 );
$app->MainLoop;

pass; # ended successfully

sub got_timer_event {
    my( $frame, $event ) = @_; @_ = (); # hack to avoid "Scalars leaked"

    start_thread( $frame );
}

sub start_thread {
    my( $frame ) = @_;

    my $thread = threads->new( \&send_thread_event, $frame );
    $thread->join;
}

sub send_thread_event {
    my( $frame ) = @_;

    my $threvent = new Wx::PlThreadEvent( -1, $TEST_DONE_EVENT, 123 );
    Wx::PostEvent( $frame, $threvent );
}

sub got_thread_event {
    pass;

    $frame->Destroy;
}