Schrift
[thread]11043[/thread]

$widget->repeat forken?

Leser: 3


<< >> 7 Einträge, 1 Seite
Gast Gast
 2007-12-19 12:52
#104022 #104022
Hi,

in meinem Programm gibt es eine funktion, die mittels "$widget->repeat"
alle x minuten wiederholt abläuft.
Dummerweise braucht die Funktion ~30 secs, bis sie fertig ist. Während dieser Zeit kann ich sonst nichts mehr machen (z.b. im gui knöpfe drücken, etc etc).

Wie kann ich diese Funktion vom Ablauf des restlichen Programms abkoppeln?
Es gibt dafür ja fork(), aber wie genau kann ich dann "$widget->repeat(50000, \&funktion);" forken?
renee
 2007-12-19 13:17
#104023 #104023
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde an Deiner Stelle mit CPAN:POE arbeiten...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-12-19 13:25
#104025 #104025
thx für den link :)


aber würde es auch mit fork gehen? wie würde man das in diesem fall dann schreiben/coden?

und wieso, falls es mit fork geht, sollte man dann zu POE greifen und nicht einfach fork benutzen?
Gast Gast
 2007-12-19 15:28
#104039 #104039
würde das hier gehen?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $mw = new MainWindow();
$mw->repeat(30000, \&func);

MainLoop();


sub func {
my $pid = fork();
if (not defined $pid) {
print "resources not available\n";
}
elsif ($pid == 1) {
# do nothing
}
elsif ($pid == 0) {
# do some calcs (takes a few mins)
}
}


oder würde da dann trotzdem erst gewartet werden, bis die subroutine fertig ist, was ja erst eintritt, wenn auch der calcs-teil abgearbeitet wurde.
renee
 2007-12-19 15:29
#104040 #104040
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe noch nie mit fork und Tk (gleichzeitig) gearbeitet...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-12-19 22:02
#104057 #104057
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
fork() sollte gehen, zumindest unter Unix, aber du muss aufpassen, dass du keine Tk-Funktionen in der geforkten Funktion aufrufst. Außerdem sollte man explizit mit CORE::exit() beenden (statt einfach nur exit).
Strat
 2007-12-20 12:41
#104063 #104063
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
man kann bei Tk sogar mit threads arbeiten (ist vermutlich experimentell), wenn man die benoetigten Threads startet, bevor das script noch irgendwas von Tk weiss, und - ebenso wie bei fork - aus den threads nicht auf Tk-Kram zugreift, sondern das vom hauptthread erledigen laesst. Bei meinen Tests funktionierte dieser Weg recht gut, ich weiss jedoch nicht, ob ich sowas auch in produktiven Codes verwenden wuerde...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 7 Einträge, 1 Seite



View all threads created 2007-12-19 12:52.