| |
|
|
Clemens Meier | Yo bin actualmente a uno Internetanwendung dran, en cierto Teile auch base64 kodiert/dekodiert voluntad necesario. Das Kodieren braucht siempre seine Tiempo, besonders en großen Archivos. Also möchte Yo esta Kodierung en el Hintergrund laufen dejar, así dass el Hauptprogramm sin Problema weiterlaufen kann. Daher voluntad Me gusta una Hintergrundprozess starten.
Folgendes Szenarium: Yo habe una haupt.exe , una con XProfan compiliertes Stück Programa Dann Yo una base64.prc . El Kommunikation zwischen beiden se via pipe.pcu stattfinden. Beim Beenden de haupt.exe se auch el Hintergrundprozess darse por concluido (no dass lo como Leiche en el Speicher restos).
Soviel Yo weiß, kann Yo el base64.prc como Parámetro de haupt.exe starten. Und como Yo kein Ventana generiere, erscheint lo auch nirgendwo, höchstens en el Taskmanager como Prozess. Richtig? Starte Yo al Besten con WinExec ... ? Como bekomme Yo una Handle zurück y podría con Destroy(&handle) el Prozess otra vez stoppen. Auch correcto?
Yo habe hier en el Foro aber auch otro Möglichkeiten gefunden. Aunque wurde hay sólo jeweils una .exe comenzó, siempre sin Parámetro. Dann wurde en un otro Hilo erwähnt, dass lo bajo Win9X el Aufrufen mehrere Profanprogramme gleichzeitig a Abstürzen führt. Leider wurde el Diskussion hay no a Ende geführt, así dass Yo no weiß, si dafür una Workaround son.
Und letztes: vermutlich se el base64.prc no einzige Prozess bleiben. Gäbe lo Problemas, si mehrere voluntad?
Saludo |
|
|
| |
|
|
|
| Hm hier habs veces zusammengepinselt, el debería para una erste Orientierung ausreichen: KompilierenMarcaSeparación {$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, el Usted sehrwohl auch mehere Prozesse beauftragen kannst, Usted Usted entonces aber auch una propio Protokoll schaffen musst a Inputs a koordinieren. |
|
|
| |
|
|
|
Clemens Meier | Que el Pipe me está klar y una Threadid es para el Protokol con el eigenständigen Prozessen reserviert. Diese Prozesse debería permanent en el Hintergrund laufen. Via Pipe y una Handle pro Prozess verläuft el Kommunikation. Doch como es lo con el Prozessen incluso. Gibt lo Problemas, si yo el Prozess como oben angegeben aufrufe, also mehrere Profaninstanzen en el Speicher habe.
Oder se Yo más en una Aufruf como bajo [...] bauen? Como se aber sólo una exe aufgerufen. Yo voluntad pero no verschiedene exe anbieten, pero möglichst como umbenannte prc-Archivos,
Also: mein Hauptprogramm heißt programm.exe In diesem Programa voluntad zwei Prozesse comenzó el una hieß prozess1.prc y fue zuvor umbenannt a p1.ttt. Dieses se con programm.exe p1.ttt comenzó voluntad el zweite hieß prozess2.prc y fue zuvor umbenannt a p2.ttt. Dieses se entonces con programm.exe p2.ttt comenzó voluntad. Beide Prozesse haben kein propio Ventana, lo son also auch no Fehlermeldungen oder Messages. Alles se via Protokol a el Hauptprogramm gemeldet, así dass dieses darauf reagieren kann, si nötig.
Gäbe lo así Problemas? Welches Verfahren es para el Aufruf el PRC-Archivos a empfehlen? Yo hoffe, mein Problema es ahora klar geworden (trotzdem danke IF) |
|
|
| |
|
|
|
|
Gibt lo Problemas, si yo el Prozess como oben angegeben aufrufe, also mehrere Profaninstanzen en el Speicher habe.
Pauschal nein.
Gäbe lo así Problemas?
Pauschal nein.
Oder se Yo más en una Aufruf como bajo...
Steht Usted frei.
Welches Verfahren es para el Aufruf el PRC-Archivos a empfehlen?
Siehe Source.
PS: Es unwichtig como Su Exen heissen, y wieviele exen (oder prcs) Usted erstellst, y wieviele Prozesse laufen. Mein Source oben demonstriert: Un Exe, Zwei Prozesse, Ein Source. |
|
|
| |
|
|
|
Clemens Meier | Mein Problema war wohl, dass Yo el Hilo [...] gelesen habe (Sistema o Programmabsturz, si mehrere Profanprogramme laufen). Aber si me ahora erklärst, dass lo como absolut no Problemas son, egal welche Método Yo verwende, Voy a dir el sólo una vez glauben. Aber wehe, irgendein win95 / 98 User reißt me el Kopf de, entonces besuche Yo dich |
|
|
| |
|
|