Perl: Popup als Child-Prozess

Hallo.

ich habe ein Perl-Script, welches in einem CMD-Fenster läuft. Dieses soll PopUps werfen, um einen Warnungen anzuzeigen.
Gestartet wird das Fenster in einem Unterprogramm:

&WINDOWMESSAGE;

sub WINDOWMESSAGE
{
$message = "
Zeit: $zeit
Einstempelzeit: $intime Uhr

Es kann nur zwischen 06:00 Uhr und 19:59 Uhr gestempelt werden!


07 Stunden erreicht um: $minworktime Uhr
10 Stunden erreicht um: $maxworktime Uhr


Rest auf 07 Stunden: $minresttime
Rest auf 10 Stunden: $maxresttime

„;
my $hw = MainWindow->new();
$hw->title(“$scriptname");
my $text = $hw->Text(-width => 100,
-height => 15)->pack(-side => ‚left‘);
my $scroll = $hw->Scrollbar(-command => [‚yview‘, $text]);
$text->configure(-yscrollcommand => [‚set‘, $scroll]);
$scroll->pack(-side => ‚left‘,
-fill => ‚y‘);

$text->delete(‚1.0‘, ‚end‘);
$text->insert(‚end‘, $message);

$hw->Button(-text => ‚Exit‘,
-command => sub {$hw -> destroy()})->pack(-side => ‚left‘,
-fill => ‚both‘,
-expand => 1);

MainLoop();
}

Es funktioniert auch alles, ausser daß mein Script erst weiterläuft, wenn dieses Fenster wieder geschlossen ist.

Wie erreiche ich es, dieses Unterprogramm als eigenständigen Prozess laufen zu lassen? Versuche mit forc() habe ich schon erfolglos gemacht, evtl. hatte ich aber auch nur die Funktion nicht ganz verstanden.

Gruß

Martin

Hallo,

Es funktioniert auch alles, ausser daß mein Script erst
weiterläuft, wenn dieses Fenster wieder geschlossen ist.

Wie erreiche ich es, dieses Unterprogramm als eigenständigen
Prozess laufen zu lassen?

Mit fork. Oder Threads.

Versuche mit forc() habe ich schon
erfolglos gemacht, evtl. hatte ich aber auch nur die Funktion
nicht ganz verstanden.

Vielleicht hast du sie auch falsch geschrieben.
Such mal mit Google nach ‚perl fork example‘, da findet sich einiges.

Ansonsten ist „erfolglos“ nicht besonders informativ.

Übrigens kann Windows kein echtes fork, daher emuliert perl das, indem es einen zusätzlichen Thread startet.

Grüße,
Moritz

Hallo Moritz,

danke für den Tipp, ich hatte schon nach fork() gegoogelt, aber irgendwie nichts Brauchbares gefunden.

Aber jetzt habe ich die Lösung, wie ich das Unterprogramm als eigenen Prozess aufrufen kann:

if(fork() == 0){&WINDOWMESSAGE};

Gruß

Martin