Entwickler-Ecke

Windows API - Processmessages ALternative in COnosolenanwendungen [DONE]


markus\win32 - Do 01.05.03 18:50
Titel: Processmessages ALternative in COnosolenanwendungen [DONE]
Hi
meine Consolenanwendung macht öfters prozesorintensive aufgaben, und soll aber weiterhin auf windowsmessages reagieren, also so als ob ich Application.Processmessages mache. Nur muss ich dazu die Forums unit einbinden, was mein 50kb Projekt auf 400kb hochjagt. Also würde ich gerne wissen wie ich selber, zumindest bestimmte wichtige windowsmessages agfange und auswerte) also z.B. close events ...

Markus


wulfskin - Do 01.05.03 18:55

Ich weiss jetzt nicht ob das ein guter Tipp ist, aber wenn du Threads verwendest, dann brauchst du "nur" die Unit Classes. Ob die Intern auch Forms benötigt, weiss ich nicht.
Ansonsten erstell den Thread mit der Windows API! Ich glaub im Forum gibt es ein Beispiel von Andreas X dazu.

Gruß wulfskin!


markus\win32 - Do 01.05.03 18:57

Naja kommt darauf an was einfacher ist:
Paar verscheidene messages auszuwerten, oder dem teil des codes in einem extra thread ausführen zu lassen


Delete - Do 01.05.03 19:09


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
{-----------------------------------------------------------------------------
  Procedure : ProcessMessages
  Author    : Nico bendlin
  Date      : 2003-02-08
  Purpose   : Replacement for Application.ProcessMessages
  Arguments : hWnd: DWORD
  Result    : None
-----------------------------------------------------------------------------}
procedure ProcessMessages(hWnd: DWORD);
var
  Msg: TMsg;
begin
  while PeekMessage(Msg, hWnd, 0, 0, PM_REMOVE) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end;

Als Handle mußt du allerdings das Handle eines Fensters angeben, an das die Nachrichten gehen, da es eigentlich nur bei Fenstern Sinn macht. Eine Konsolenanwendung, die in einer Schleife gerade was rechnet, kann so wie so keine Eingaben entgegennehmen.


markus\win32 - Do 01.05.03 19:22

das sollte auch nur auf close und minimize regieren


Delete - Do 01.05.03 19:25

Das Ding läuft doch in der Konsole oder etwa nicht? Und die sollte auch reagieren, wenn dein Programm beschäftigt ist, da sie von Windows bereitgestellt wird.


markus\win32 - Do 01.05.03 19:35

ok dann ist das ja eh überflüssig :)

Danke - Markus


Delete - Do 01.05.03 19:37

Gerade ausprobiert, ist überflüssig. Es sind praktisch zwei Programme, dein Programm und die Konsole. Die Konsole wird von Windows bereitgestellt und das Fenster macht ja eh nichts außer einen Container für dein Konsolenprogramm bereitzustellen, kann also noch ohne weiteres Nachrichten bearbeiten, wärend dein Programm arbeitet.