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

CGI::Application und Threads: Starten und Beenden eines Thread über CG



<< >> 2 Einträge, 1 Seite
Gast Gast
 2007-06-14 18:02
#198 #198
Hy

Ich habe mir mithilfe von CGI::Application ein kleines Webprogramm geschrieben.
Nun habe ich eine Seite mit 2 Knöpfen, welche einen Thread steuern sollen.

mein Code:
Code (perl): (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!"D:\Apps\Perl\bin\perl.exe"
package CheckPagesMain_new;
use HTML::Template;
use PerlMain; 
use base 'CGI::Application';
use CGI;
use warnings;
use threads;


my $runHandler = PerlMain->new();
my $tmpl = ();

my $processStatus = 0;

sub setup{
    my ($self) = @_;

    $self->start_mode( 'statusProcess' );
    $self->mode_param( 'rm' );
    $self->run_modes(
        AUTOLOAD => \&seite1,
        statusProcess => \&statusProcess,
        urlLoeschen => \&urlLoeschen,
        seite1 => \&seite1,
        editUrlTargets => \&editUrlTargets,
    );
    
    $tmpl = $self->load_tmpl( 'D:/Apps/xampp/htdocs/myProjekt/page.html' );   
    
}

sub statusProcess{
  my ($self) = @_; 
     
  my $cgi=CGI->new(); 
       
  my $tmpl = $self->load_tmpl( 'D:/Apps/xampp/htdocs/myProjekt/page.html' );
  my $body = $self->load_tmpl( 'D:/Apps/xampp/htdocs/myProjekt/statusProcess.html' );
    
    
  my %params = $cgi->Vars(); # Parameter auslesen
    my $button = $params{button};    
 
    if ($button eq "Start"){
        $tmpl->param( SEITE => 'startProcess' );
       -->;THREAD STARTEN
        
    }
    if ($button eq "Stop"){
        $tmpl->param( SEITE => 'stopProcess' );
         -->;THREAD STOPEN
   }  
    
    
   my $body_string = $body->output();    
   $tmpl->param(body => $body_string); 
   return $tmpl->output;
}


Wenn auf der html-Seite der Knopf starten gedrückt wird, soll der Thread gestarten werden. Er soll dann eine Endlosschleife in perlMain ausführen. Der Nutzer soll aber weiterhin mit dem Programm arbeiten können, daher die Threadidee...
Wenn der Stop - Knopf gedrückt wird, soll der Thread enden.
Wie mache ich das? Wer kann mir helfen?\n\n

<!--EDIT|renee|1181839417-->
murphy
 2007-06-14 19:02
#199 #199
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
CGI-Applikationen leben immer nur solange, wie sie die Anfrage des Webclients bearbeiten. Daher kann man in einem CGI-Programm kaum sinnvoll Threads verwenden.

Um HTTP-Anfragen mit persistent laufenden Programmen zu bearbeiten, muss man entweder seinen eigenen Webserver selbst schreiben, direkt im Webserver ansetzen und zum Beispiel einen mod_perl-Handler statt eines CGIs schreiben, oder seine Anwendung über ein Protokoll wie FastCGI oder SCGI an den Webserver anbinden. Diverse Webapplikationsframeworks unterstützen diese Methoden. CGI::Application sollte, wenn ich mich richtig erinnere, zum Beispiel auch mit FastCGI verwendbar sein.

Falls nur "normale" CGIs in Frage kommen, kann man nur noch mit separaten Prozessen anstelle von Threads arbeiten. Die Kommunikation zwischen mehreren Prozessen kann durchaus kompliziert werden, solange es aber nur um das Starten und Stoppen geht, reichen Signale aus und das Management beschränkt sich auf Aufrufe von fork und kill.
When C++ is your hammer, every problem looks like your thumb.
<< >> 2 Einträge, 1 Seite



View all threads created 2007-06-14 18:02.