Deutsch
Forum

Hintergrundprozesse, wie richtig?

 

Clemens
Meier
Ich bin derzeit an einer Internetanwendung dran, bei der bestimmte Teile auch base64 kodiert/dekodiert werden müssen. Das Kodieren braucht immer seine Zeit, besonders bei großen Dateien. Also möchte ich diese Kodierung im Hintergrund laufen lassen, so dass das Hauptprogramm ohne Problem weiterlaufen kann. Daher will ich gerne einen Hintergrundprozess starten.

Folgendes Szenarium:
Ich habe eine haupt.exe , ein mit XProfan compiliertes Stück Programm
Dann habe ich eine base64.prc . Die Kommunikation zwischen beiden soll via pipe.pcu stattfinden.
Beim Beenden von haupt.exe soll auch der Hintergrundprozess beendet werden (nicht dass das Ding als Leiche im Speicher bleibt).

Soviel ich weiß, kann ich das base64.prc als Parameter von haupt.exe starten. Und da ich kein Fenster generiere, erscheint es auch nirgendwo, höchstens im Taskmanager als Prozess. Richtig? Starte ich es am Besten mit WinExec ... ? Da bekomme ich ein Handle zurück und könnte mit Destroy(&handle) den Prozess wieder stoppen. Auch richtig?

Ich habe hier im Forum aber auch andere Möglichkeiten gefunden. Allerdings wurde dort nur jeweils eine .exe gestartet, immer ohne Parameter. Dann wurde in einem anderen Thread erwähnt, dass es unter Win9X das Aufrufen mehrere Profanprogramme gleichzeitig zu Abstürzen führt. Leider wurde die Diskussion dort nicht zu Ende geführt, so dass ich nicht weiß, ob es dafür einen Workaround gibt.

Und letztes: vermutlich wird die base64.prc nicht der einzige Prozess bleiben. Gäbe es Probleme, wenn es mehrere werden?

Gruß
 
XProfan 9.1; XP SP2; FF; Editpad
22.05.2006  
 



Hm hier habs mal zusammengepinselt, das sollte für eine erste Orientierung ausreichen:
KompilierenMarkierenSeparieren
 {$cleq}
def $apptitle ClemensVorlage
cls
 $U pipe.pcu = pipe.
 $U thread.pcu = thread.
declare pipe&

if %parcount

    encode

else

    declare ex&
    app

endif

pipe.close pipe&
end

proc app

    print app
    case pipe.is(myClemensPipe) : error Pipe already exists, abort.
    pipe&:=pipe.create(myClemensPipe)
    declare fle$
    fle$:=dfokk.bmp
    casenot fileexists(fle$) : error File +fle$+ doesnt exist, abort.
    pipe.push pipe&,>+fle$
    shell par$(0)+ -
    thread.start 1,3
    usermessages 1

    whilenot ex&

        waitinput

    wend

    thread.stop 1
    print Tjoar fertig :P [taste]
    waitkey

endproc

proc encode

    print encoder
    casenot pipe.is(myClemensPipe) : error Pipe doesnt exists, abort.
    pipe&:=pipe.create(myClemensPipe)
    declare fle$
    fle$:=del$(pipe.pop(pipe&),1,1)
    casenot fileexists(fle$) : error File +fle$+ doesnt exist, abort.
    declare mem#,siz&
    siz&:=filesize(fle$)
    casenot siz& : error File +fle$+ is without content.
    print File: +fle$
    dim mem#,siz&
    blockread(fle$,mem#,0,siz&)
    declare i&,s$,c&
    for i&:=0 to siz& do begin
    c&+
    s$:=s$+.hexx(byte(mem#,i&))

    if c&>=512

        c&:=0
        pipe.push pipe&,<+s$
        s$:=

    endif

    end
    case len(s$) : pipe.push pipe&,<+s$
    pipe.push pipe&,.//bye

    proc .hexx

        parameters b&
        case b&<16 : return 0+hex$(b&)
        return hex$(b&)

    endproc

endproc

proc thread.do

    parameters n&
    declare s$
    s$:=mid$(pipe.get(pipe&),1,1)

    if n&==1

        if (s$==<)

            print pipe.pop(pipe&)

        elseif (s$==.)

            print done.
            ex&+
            sendmessage(%hwnd,1,0,0)

        endif

    endif

endproc

proc error

    parameters s$
    messagebox s$,$apptitle,0
    end

endproc

Das Demo zeigt auch, das Du sehrwohl auch mehere Prozesse beauftragen kannst, Du Dir dann aber auch ein eigenes Protokoll schaffen musst um die Inputs zu koordinieren.
 
22.05.2006  
 




Clemens
Meier
Das mit der Pipe ist mir klar und eine Threadid ist für das Protokol mit den eigenständigen Prozessen reserviert. Diese Prozesse sollen permanent im Hintergrund laufen. Via Pipe und ein Handle pro Prozess verläuft die Kommunikation. Doch wie steht es mit den Prozessen selbst. Gibt es Probleme, wenn ich den Prozess wie oben angegeben aufrufe, also mehrere Profaninstanzen im Speicher habe.

Oder soll ich eher auf einen Aufruf wie unter [...]  bauen? Da wird aber nur eine exe aufgerufen. Ich will aber nicht verschiedene exe anbieten, sondern möglichst als umbenannte prc-Dateien,

Also: mein Hauptprogramm heißt programm.exe
In diesem Programm werden zwei Prozesse gestartet
das eine hieß prozess1.prc und wurde zuvor umbenannt zu p1.ttt. Dieses soll mit
programm.exe p1.ttt gestartet werden
das zweite hieß prozess2.prc und wurde zuvor umbenannt zu p2.ttt. Dieses soll dann mit
programm.exe p2.ttt gestartet werden.
Beide Prozesse haben kein eigenes Fenster, es gibt also auch keine Fehlermeldungen oder Messages. Alles wird via Protokol an das Hauptprogramm gemeldet, so dass dieses darauf reagieren kann, wenn nötig.

Gäbe es damit Probleme? Welches Verfahren ist für den Aufruf der PRC-Dateien zu empfehlen? Ich hoffe, mein Problem ist jetzt klar geworden (trotzdem danke iF)
 
XProfan 9.1; XP SP2; FF; Editpad
22.05.2006  
 




Gibt es Probleme, wenn ich den Prozess wie oben angegeben aufrufe, also mehrere Profaninstanzen im Speicher habe.


Pauschal nein.


Gäbe es damit Probleme?


Pauschal nein.


Oder soll ich eher auf einen Aufruf wie unter...


Steht Dir frei.


Welches Verfahren ist für den Aufruf der PRC-Dateien zu empfehlen?


Siehe Source.

PS: Es ist unwichtig wie Deine Exen heissen, und wieviele exen (oder prcs) Du erstellst, und wieviele Prozesse laufen. Mein Source oben demonstriert: Eine Exe, Zwei Prozesse, Ein Source.
 
22.05.2006  
 




Clemens
Meier
Mein Problem war wohl, dass ich das Thread [...]  gelesen habe (System oder Programmabsturz, wenn mehrere Profanprogramme laufen). Aber wenn Du mir jetzt erklärst, dass es da absolut keine Probleme gibt, egal welche Methode ich verwende, dann werde ich dir das erst einmal glauben. Aber wehe, irgendein win95 / 98 User reißt mir den Kopf ab, dann besuche ich dich
 
XProfan 9.1; XP SP2; FF; Editpad
23.05.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.040 Betrachtungen

Unbenanntvor 0 min.
Sven Bader02.08.2021
Jochen Roxlau24.03.2015
Gary1234506.02.2013
Pedro Miguel20.10.2012
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Clemens Meier (3x)
iF (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie