AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeitprobleme

Ein Thema von Praktikant · begonnen am 24. Okt 2003 · letzter Beitrag vom 11. Nov 2003
Antwort Antwort
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#1

Laufzeitprobleme

  Alt 24. Okt 2003, 09:14
Habe ein Programm welches zyklisch vom COM Port Daten haolt und schreibt.
Nun ist das Delphi Programm so ausgelastet, dass es während dieser Schreibaktionen keine weitere Bedienung zulässt (delphi reagiert nicht solange daten geschrieben/geholt werden)
Deshalb habe ich die Formulare lesen und schreiben COM-Port in ein seperates Programm verfrachtet (eigene exe).

Nun meine Fragen:
Wie kann ich aus dem Hauptprogramm auf die seperate exe zugreifen, bzw. diese aufrufen und beenden.
Auch, sofern es geht, in der seperaten exe einen best. Befehl ausführen (Kommunikation zu externer Peripherie am angeschlossenen COM Port starten, sprich buttons aus dem anderen Programm heraus klicken lassen).

Grundsätzlich ist das natürlich nicht schon, da ich 2 Programme laufen lasse und das Kommu.-Programm sollte ja eigentlich nicht in der task-bar zu sehen sein, da es ja eigentlich eine interne Programmroutine ist.

Zusammengefasst:
-wie kann ich exe files starten und beenden
-gibt es eine bessere Möglichkeit (für einen unversierten Paktikanten )das Problem zu lösen?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Laufzeitprobleme

  Alt 24. Okt 2003, 09:25
Hallo Praktikant,
wenn Du zwei exe hast, die beide von Dir kannst über Botschaften kommunizieren.
Über RegisterWindowsMessage kannst Du dir eigene Botschaften erzeugen, die systemweit eindeutig sind. Für den Datenaustausch hat bei mir die Botschaft WM_COPYDATA als brauchbar erwiesen.

Ich würde das Abfragen des COM-Ports in einen eigenen Thread auslagern.
  Mit Zitat antworten Zitat
Benutzerbild von samson
samson

Registriert seit: 26. Aug 2003
Ort: Hövelhof Riege
105 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Laufzeitprobleme

  Alt 24. Okt 2003, 09:39
Hallo Prakti!!!

Ein externes Progamm würde ich mit ShellExecute(...) starten. Denke daran das Du die Unit "shellapi" mit einbindest.

Das Beenden würde ich vielleicht, wie 'Jens' beschrieben über Botschaften realisieren, damit das Programm ein Ordentliches Ende hat.

Gruss


Frank
Frank Gellermann
Wer Informationen hat, hat Macht. Wer Macht hat, hat Informationen!!!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Laufzeitprobleme

  Alt 24. Okt 2003, 10:03
dnake erstmal.
Klingt nicht gerade einfach, aber wird schon irgendwie klappen.

Den COM-Port abzufragen ist nicht das Problem, das läuft schon. Meine Frage war nur, ob ich von einem Programm einen Button (hinter welchem COM-Port Kommunikation ist) des anderen Programmes klicken lassen kann.

Sind beides von mir verbrochene Programme, somit kann ich ja Botschaften hin und her schicken.
Welche Möglichkeiten habe ich da, und mit welchen Befehlen?

Und kann ich die exe welche irgendwie im Hintergrund laufen lassen, so dass nicht in der task bar die exe ist, sieht blöd aus und wenn man die beendet dann funktioniert das ganze Programm nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Laufzeitprobleme

  Alt 24. Okt 2003, 10:53
Du kannst es aber auch aller in einer EXE lassen. Brauchst nur ab und zu in rechenintensive oder langandauernte Prozeduren deines Programms Application.ProcessMessages; einfügen. Das gibt deinem Programm jeweils etwas Zeit zum reagieren. Mach es aber nicht zu häufig, da jedes mal deine Prozedur dafür angehalten und damit langsamer wird.
Du brauchst dich auch nicht mehr um die Kommunikation zwichen deinen beiden Programmen zu kümmern. (es gibt ja nur noch eins)

Oder du lagerst solche Prozesse in einen eigenen Thread aus. Siehe Hier im Forum suchenThread.
Wobei ersteres einfacher ist.

Add:
-Anhang
-kannst sogar "ohne" starten, während "mit" läuft.
Angehängte Dateien
Dateityp: exe processmessages.exe (95,3 KB, 5x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Laufzeitprobleme

  Alt 24. Okt 2003, 11:33
Hallo Praktikant,
in der Anlage ist ein kleines Beispiel wie Programme über Botschaften kommunizieren können.
App1.exe ist der Master. Über App1.exe wird App2.exe gestartet.
Achtung: Wenn Du App2 o. App1 in der IDE geöffnet hast, kann FindWindow fehlschlagen.
Dann sind nämlich zwei Forms mit gleichem Klassennamen vorhanden.
Wenn der Anwender App2 schließt wird App2 von App1 wieder gestartet.
Wenn App1 geschlossen wird, wird auch App2 beendet.

Ach ja, App2 kann nicht von hand gestartet werden, weil in OnCreate-Event in einer Schleife nach App1 gesucht wird. Wenn App1 nicht gestartet ist handelt es sich im Beispiel um eine Endlosschleife.
Bei einer richtigen Anwendung müsste man ein TImeOut realisieren.
Angehängte Dateien
Dateityp: zip msg.zip (348,0 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Laufzeitprobleme

  Alt 27. Okt 2003, 12:02
hi,
danke erstal für die Antworten.
Da ich an meinem Programm überall herumbastle (wird relativ komplex) habe ich mich bihser nicht mehr mit diesem Prob beschäftigt.

Nun, da das seperate Programm für die Kommunikation über COM-Schnittstelle ununterbrochen am Daten schaufeln ist wird das mit Application.ProcessMessages wohl nicht funktionieren. Das muss komplett im Hintergrund ablaufen.

Und da nun schon 2 seperate Programme da sind werde ich in dieser Richtung auch weiter machen, da ich von threads absolut keinen plan habe.

Werde mir also mal das Bsp. von jens anschauen und melde mich dann wieder
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Laufzeitprobleme

  Alt 28. Okt 2003, 14:44
ok, habe mir nunmal das Programm gezogen und betrachtet
Nix versteh

Was für ein Typ ist konsts, ist ja kein Formular.

Das Prog selber startet (bei mir) nur ein paar mal wieder app2, wenn ich dies schliesse. Sprich mehmaliges beenden von app2 und app1 gibt auf ein neues app2 zu erstellen.
Geht es, dass man die app2 als eine prozedur laufen läßt, damit diese nicht geschlossen werden kann.


Tja, bin noch unschlüssig was ich machen soll, da ich am Anfang stehe könnte ich natürlich auch mehrere threads realisieren, wenn diese unabhängig voneinader laufen.
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: Laufzeitprobleme

  Alt 10. Nov 2003, 16:24
habe nun alle funktionen, prozeduren usw. in meine beiden programme kopiert.
Wenn ich nun mein app1 starte und den button app2 ausführen klicke dann hängt sich mein app1 auf und weiteres passiert nicht. Habe gesehen dass er in der
Delphi-Quellcode:
   While Result=0 do
      Result:=FindWindow('TFormApp2',Nil);
Schleife hängen bleibt.
Zuvor sollte jedoch schon die 2.app gestartet werden, mein ursprüngliches Prob liegt also woanders.

Durch herumprobieren usw. habe ich den alternative Fall, dass nix passiert nachdem ich auf den button drücke.


Was muss ich noch besonderes beachten? Habe jetzt schon >6std herum probiert und nix geht

[edit=Daniel B]Doppelpost gelöscht. Mfg, Daniel B[/edit]
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Laufzeitprobleme

  Alt 11. Nov 2003, 12:17
neuer Tag, neuer klarer Verstand!
Habe es jetzt zum laufen bekommen, mir mal alles zum Thema Handle durchgelesen, an dieser Stelle großes Lob an das sehr gute Tutorial.

Der Fehler lag daran dass ich u.a. den flaschen Handle abgefragt habe, und noch ein paar weitere Fehler. Dachte das meiste wären beliebige Bezeichner, aber dem ist wohl nicht so.
Jetzt geht's

edit: weiß aber immer noch nicht was konsts sein soll, einfach ein seperates 'register' wo die API Befehle drin stehen?!
Aber das sind ja selbst definierte (PM_xxx_von_JS), und sobald da was umbenannt wird geht's schon ncith mehr, wie das??
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz