AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programm wärend Prozess steuerbar machen
Thema durchsuchen
Ansicht
Themen-Optionen

Programm wärend Prozess steuerbar machen

Ein Thema von SyntaxXx · begonnen am 3. Apr 2010 · letzter Beitrag vom 3. Apr 2010
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 17:00
Hi und zwar habe ich gelesen, das es geht, das ein Programm, wärend es gerade am arbeiten ist trotzdem zu steuern ist.
Sprich da sman es verschieben, minimieren etc. kann.

Jetzt habe ich mal gesucht finde aber nichts.

Habe diverse suchbegrife probiert jedoch ohne erfolg.

Jetzt wollte ich mal hier nach fragen, ob ihr mir helfen könnt.
  Mit Zitat antworten Zitat
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 17:03
Ich weiß nicht ob du das meinst, aber bau während dein Programm irgendne Schleife durchwandert oder so
Application.ProcessMessages; ein.
Dadurch reagiert es z.B. auf Klicks aufs MainMenu o.Ä.
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 17:11
Oder Threads.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 17:15
Wenn man etwas mehr Erfahrung mit der Programmierung hat, dann würde ich klar zu Threads tendieren, da diese imho mächtiger sind also dieses Application.ProcessMessages. Ebenso wird das Programm dadruch eher effizienter (was bei ungeschickter Programmierung natürlich nicht sein muss )

Aber: Mit Threads kann man sich einige Probleme einfangen und sie sind noch lange nicht so einfach zu verwenden wie Application.ProcessMessages.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#5

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 18:08
Ok ich hab mir jetzt einmal ein wenig zu Thread durchgelesen.
Das Prinzip solcher ist klar.

Nur die Anwendung nicht.

Ich stelle mir das so vor:

Als Primärer Thread steht nun das sich das fenster immer bewegen lassen kann.
Und als Sekundärer Thread ständ dann mein ganzer anderer Quellcode.

Solange ich das Fenster nicht bewege arbeitet es alles andere durch, doch sobald ich mein fester bewegen will, stoppt der rest, sodass ich das fenster bewegn kann.

Stimmt das so?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 18:20
Threads laufen immer parallel, außer du hälst einen an und beendest ihn. Eine VCL-Anwendung läuft schon in einem Thread, dem MainThread (weiß gar nicht ob man den wirklich so nennt). Wenn du Berechnungen vornimmst, so kannst du das in einen anderen Thread auslagern, der dann parallel dazu läuft.

Warum kannst du dein Programm eigentlich nicht bewegen, wenn du eine dauerhafte Rechnung (z.B. Berechnung der letzten Stelle von Pi ) in deinem MainThread laufen lässt? Windows verschickt Nachrichten an Anwendungen -- genauer an den MainThread -- u.a. fällt hierbei das Bewegen von Fenster drunter. Wenn dein Programm eigentlich nichts macht, d.h. deinen geschriebenen Code nicht ausführt, so erhält es dennoch (für dich im Hintergrund) diese Nachrichten und zeichnet z.B. die Form neu oder so Sachen. Das funktioniert aber nur, wenn diese Nachrichten auch wirklich verarbeitet werden, was du an sich nicht merkst.

Wenn du aber probierst die letzte Stelle von Pi zu berechnen (was offensichtlich nicht geht), dann kommt dein Programm nicht mehr dazu die Nachrichten abzuarbeiten, da nur diese Berechnung ausgeführt wird. Es kann die eingehenden Nachrichten nicht mehr abarbeiten, da es bis zu dieser Stelle nicht mehr gelangt, es läuft ja nur diese Schleife. Das kannst du mit einem Application.ProcessMessages umgehen, da dieser Befehl dein Programm dazu veranlasst genau diese Nachrichten abzuarbeiten.

Nun hast du eben die genannten Möglichkeiten, entweder Application.ProcessMessages oder Threads. Application.ProcessMessages ist aber langsamer als ein Thread, da ja deine Berechnung auf die Abarbeitung der Nachrichten warten muss und umgekehrt. Hast du nun aber zwei Threads, so umgehst du dieses Problem, d.h. die Berechnung läuft echt parallel (naja, echt eigentlich nur, wenn du mehrere Cores im Rechner hast) zu deiner "Anwendung" -- hier ist der MainThread gemeint! -- der die Windows-Nachrichten verarbeiten kann.

// edit
Nun zu deinem Problem überhaupt Erstelle eine Klasse und leite diese vom Typ TThread ab. Dann überschreibst du die protected-Methode Execute und schreibst dort deinen Code hinein, wie z.B. die obige Berechnung von der letzten Stelle von Pi. Der MainThread existiert ja eh schon mit deiner Anwendung, ergo musst du nur noch diesen instanziieren laufen lassen. Alles weitere solltest du hier im Forum finden. Aber vorsicht, wenn du auf VCL-Objekte etc. zugreifen willst. Diese sind (meist) nicht threadsafe.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#7

Re: Programm wärend Prozess steuerbar machen

  Alt 3. Apr 2010, 22:27
Dann natürlich eine Message an das zu steuernde Programm senden. Zum Beispiel WM_COPYDATA.

Als Daten müsste dann das Kommando für die beabsichtigte Aktion gesendet werden.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  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 09:45 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