Schrift
[thread]4921[/thread]

Poe: Frage zu Example



<< >> 10 Einträge, 1 Seite
Froschpopo
 2005-04-07 00:24
#43362 #43362
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab mir hier von poe.perl.org dieses Beispiel gezogen:
Code: (dl )
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
use Tk;
use POE;

POE::Session->create(
inline_states => {
_start => \&handle_start,
ev_count => \&handle_count,
ev_clear => \&handle_clear,
}
);

POE::Kernel->run();
exit 0;

sub handle_start {
$poe_main_window->Label(
-text => "Counter"
)->pack;

$_[HEAP]->{counter_widget} =
$poe_main_window->Label(
-textvariable => \$_[HEAP]->{counter}
)->pack;

$poe_main_window->Button (
-text => "Clear",
-command => $_[SESSION]->postback("ev_clear")
)->pack;

$_[KERNEL]->yield("ev_count");
}

sub handle_count {
$_[HEAP]->{counter}++;
$_[KERNEL]->yield("ev_count");
}

sub handle_clear {
$_[HEAP]->{counter} = 0;
}


Nun hab ich zwei Fragen:

Warum kann ich das Script nicht mit nem normalen Klick auf "schließen" beenden?

UND

warum das exit 0 ?
esskar
 2005-04-07 00:57
#43363 #43363
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Froschpopo,06.04.2005, 22:24]Nun hab ich zwei Fragen:

Warum kann ich das Script nicht mit nem normalen Klick auf "schließen" beenden?

UND

warum das exit 0 ?[/quote]
1. geht bei mir prima
2. exit beendet das program an dieser stelle
Froschpopo
 2005-04-07 02:30
#43364 #43364
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Wieso bekomme ich bei diesem Snippel keinen Rückgabewert? nicht lachen...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
POE::Session->create(
 inline_states => {
    _start   => \&anfang,
    schleife => \&schleife
 }
);
POE::Kernel->run();
exit 0;

sub anfang {
    $poe_main_window->Label(-text => $_[HEAP]->{callback})->pack();
    $_[KERNEL]->yield("schleife");
}

sub schleife {
    $_[HEAP]->{callback} = "Hier ist der Text";        
    $_[KERNEL]->yield("schleife");
}
\n\n

<!--EDIT|Froschpopo|1112826725-->
esskar
 2005-04-07 03:04
#43365 #43365
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wie jetzt?
was jetzt?
versteh die frage nicht!

btw. es ist sonnvoller, komplett-lauffähig programme zu posten, also mit Einbindung der Module usw.
Froschpopo
 2005-04-07 03:30
#43366 #43366
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
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
#!/usr/bin/perl

use warnings;
use strict;

use Tk;
use POE;

POE::Session->create(
inline_states => {
_start => \&anfang,
schleife => \&schleife
}
);


POE::Kernel->run();
exit 0;

sub anfang {
$poe_main_window->Label(-text => $_[HEAP]->{callback})->pack();
$_[KERNEL]->yield("schleife");
}

sub schleife {
$_[HEAP]->{callback} = "Hier ist der Text";
$_[KERNEL]->yield("schleife");
}

Ich möchte den -text von dem Label in einer anderen sub definieren. Ich hab noch nicht ganz durchblickt, wie POE die Daten zwischen den Funktionen austauscht.
esskar
 2005-04-07 04:21
#43367 #43367
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
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
#!/usr/bin/perl

use warnings;
use strict;

use Tk;
use POE;

POE::Session->create(
inline_states => {
_start => \&anfang,
schleife => \&schleife
}
);
POE::Kernel->run();
exit 0;

sub anfang {
$poe_main_window->Label(-textvariable => \$_[HEAP]->{callback})->pack();
$_[KERNEL]->yield("schleife");
}

sub schleife {
$_[HEAP]->{callback} = "Hier ist der Text";
$_[KERNEL]->yield("schleife");
}


'anfang' wird nur einmal aufgerufen; da danach immer wieder schleife aufgerufen wird; deswegen musst du anstatt -text -textvariable verwenden, damit du das label ändern kannst!
Froschpopo
 2005-04-07 10:47
#43368 #43368
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab jetzt folgendes Problem:
Code: (dl )
1
2
3
while(1)
sleep(1);
}

wie kann ich das jetzt in ein Kindprozess auslagern und dann von dort aus eine funktion() im Vaterprozess starten?
Ich brauche immer erst ein Beispiel bevor ich selbst anfangen kann...
[/code]
Froschpopo
 2005-04-11 11:51
#43369 #43369
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hier ist mal mein code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#! /usr/bin/perl -w

use warnings;
use strict;
use POE qw(Session);
use threads::shared;


POE::Session->create( 'inline_states' =>
{ '_start' => \&test

}
);

sub test {
sleep(4);
print "Jetzt bin ich auch fertig\n";
}

print "ich bin zuerst fertig\n";

$poe_kernel->run();

sleep(7); # warten auf das kind

Wieso wartet er auf das Kind ?
Das Script schläft 4 Sekunden bevor es weitermacht ! Eigentlich sollt aber nur das Kind schlafen, nicht auch der Vater !
Warum klappt das nicht ?
ptk
 2005-04-11 14:52
#43370 #43370
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
In event-basierten System kann man kein sleep() benutzen. Es sei denn, POE ueberschreibt die sleep-Funktion.
Froschpopo
 2005-04-11 14:57
#43371 #43371
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
achso, und dann kann man vermutlich auch keine while benutzen um z.b. ein Dateihandle von einer Socket einzulesen oder?\n\n

<!--EDIT|Froschpopo|1113217107-->
<< >> 10 Einträge, 1 Seite



View all threads created 2005-04-07 00:24.