Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4922[/thread]

Performance und repeat

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Froschpopo
 2005-04-07 03:18
#43372 #43372
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich hab nen Tk Script und eine Schleife die eine Socketverbindung beobachtet.
Mein ursprünglicher Plan war, die Kommunikation zwischen den Sockets in einen fork auszulagern.
Das funktioniert auch prima.
Jedoch scheitere ich jedesmal an der schleife welche die pipe() zwischen Vater und Sohn überwacht.

Das Problem ist, dass Tk einfriert solange die pipe()-Schleife WAHR ergibt. Einige kennen ja schon mein Problem.

Die Frage:
Der einzigste Ausweg der mir bisher eingefallen ist mit dem Tk-eigenen repeat() in einem Intervall die Socket zu beobachten.
Aber ist das nicht sehr Performancebelastend wenn ich <READ> ca. alle 300 ms. einlese?

Das Thema POE behandel ich bereits parallel zu diesem. Es gibt also keinen Grund mich wiedermal auf POE aufmerksam zu machen. In diesem Thema gehts also nur um repeat
esskar
 2005-04-07 04:17
#43373 #43373
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
1. was meinst du mit <READ> einlesen?
2. wie, wo und wann machst du das mit den pipes?

(sorry, hab nicht alle deine Threads verfolgt (ist ja auch unmöglich ;) ), deshalb weiß ich nicht, ob du die Fragen schon an einer anderen Stelle beantwortet hast!)
Froschpopo
 2005-04-07 04:35
#43374 #43374
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
mit pipe(READ, WRITE) kann ich ja nachrichten zwischen Vater und Sohn austauschen.

Mal zu meinem Problem:
Ich hab nen Vater der lässt seinen Sohn arbeiten. Der Sohn soll aber Statusmeldungen zurück an den Vater geben.
Da der Vater in einer Schleife auf Antworten vom Sohn wartet, friert die Tk-Oberfläche ein.
Also das Thema fork scheint wirklich nicht zu funktionieren.

Wie sieht das denn mit Threads aus ?
jan
 2005-04-07 04:44
#43375 #43375
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
schau dir mal CPAN:IO::Select an, damit kannst du non-blocking checken, ob innerhalb einer bestimmten zeit daten auf einem handle zum lesen bereitstehen, d.h. er wartet maximal solange, wie du definierst und nicht endlos.
Froschpopo
 2005-04-07 04:54
#43376 #43376
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
aber ich weiss ja nicht wann das Kind fertig ist.
Ein anderes Beispiel:
Stell dir vor das Kind lauscht an einem socket und gibt bestimmte Ereignisse an den vater zurück. Der Vater müsste dann auch ständig in bereitschaft sein.

Die Lösung:
Das Kind müsste irgendwie selbstständig ne Funktion im Vaterprozess aufrufen können ohne dass der Vaterprozess in einer Schleife lauschen muss.
Froschpopo
 2005-04-07 04:56
#43377 #43377
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
optimal wäre sowas hier:

unless ( $pid = fork()) {
     sub_bei_den_eltern();
CORE::exit;
}

sub sub_bei_den_eltern {
    # hier sind wir wieder bei den eltern
}\n\n

<!--EDIT|Froschpopo|1112835415-->
esskar
 2005-04-07 05:12
#43378 #43378
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was macht dein vater denn? ich nehme an, es ist dein server, oder? zeig mir mal deinen fork-teil sowie die Stelle, an der du pipe benutzt. Am besten zusammen hängend!
Froschpopo
 2005-04-07 05:15
#43379 #43379
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
[quote=esskar,07.04.2005, 03:12]was macht dein vater denn? ich nehme an, es ist dein server, oder? zeig mir mal deinen fork-teil sowie die Stelle, an der du pipe benutzt. Am besten zusammen hängend![/quote]
der vater ist ein Tk-Programm ! Ne schleife führt in jedem fall zum einfrieren der GUI ! Ohne Schleife kann ich keine Pipe machen... :-(
esskar
 2005-04-07 05:17
#43380 #43380
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
doch kannst du!
wo und wofür benutzt du denn fork?\n\n

<!--EDIT|esskar|1112836673-->
Froschpopo
 2005-04-07 05:24
#43381 #43381
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
schau mal hier: http://board.perl-community.de/cgi-bin....403;r=1

das wird langsam off-topic :D
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-04-07 03:18.