AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi was machen mit den Hangups ? Konsolenprobleme die zweite ^ ^
Thema durchsuchen
Ansicht
Themen-Optionen

was machen mit den Hangups ? Konsolenprobleme die zweite ^ ^

Offene Frage von "hboy"
Ein Thema von hboy · begonnen am 9. Jan 2005 · letzter Beitrag vom 26. Jan 2005
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Assarbad
(Gast)

n/a Beiträge
 
#11

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 18:57
Zitat von hboy:
Problem ist:
Progamm hängt (logischerweise) bei einer Endlosschleife. jetzt will ich aber ( Interupts gibts ja wohl nich ? ) aus einem weiteren thread die eingehenden Messages behandeln. Ich frage mich jetzt ob ich den thread separat laufen lassen kann oder ob ich eigentliche Konsole mit in den Thread packen muss.
Na ob du das zusammenpacken willst oder in verschiedenen Threads und dafür synchronisiert realisierst ist doch deine Sache. Ich würde es vermutlich in den selben Thread packen, in dem du ja, wie ich vermute, eine Wait-Funktion benutzt. Dort wäre dann entsprechend eine Funktion ala MsgWaitForMultipleObjects() angebracht.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#12

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 20:46
die frage is ja gerade wie ich es dann realisier. bis jetzt gibts den Message loop nur beim Lesen einer Eingabe. Naja ich werds wohl in nen separaten thread packen und etwas umschreiben dann müsst es gehn
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#13

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 20:50
Zitat von Assarbad:
... ob du das zusammenpacken willst oder in verschiedenen Threads und dafür synchronisiert realisierst ist doch deine Sache.
ja und wie kann ich in einem separaten Thread messages holen und verarbeiten ?

Delphi-Quellcode:
 procedure TConsoleWnd.ProcessMessage;
 var msg: TMsg;
 begin
   if GetMessage(msg,0,0,0) then
   begin
     TranslateMessage(msg);
     DispatchMessage(msg);
   end;
 end;


 procedure MessageProc(param: Cardinal);
 begin
  while true do TConsoleWnd(param).ProcessMessage;
 end;

 procedure TConsoleWnd.SetUseMessageThread(doit: Boolean);
 begin
   if (self.fUseMessageThread = false) and doit then
   begin
     BeginThread(nil,0,@MessageProc,@self,0,TID);
   end;

   if (self.fUseMessageThread = true) and (not doit) then
   begin
     TerminateThread(TID,0);
   end;
 end;
das hier ist irgendwie quatsch kA wieso
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#14

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 21:23
Mooooment, wo ist denn der I/O mit den Pipes?

Also die Nachrichtenschleife hast du ja in einem Extra-Thread - dort kannst du dann simultan auf Events und Messages warten.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#15

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 21:40
... nur dass da keine Messages behandelt werden es lassen sich einfach keine abfragen. wieso ?

und der rest läuft über ... mom

Delphi-Quellcode:
Function DevOpen(var F: TTextRec): Integer;
begin
  result :=0;
end;


Function DevInOut(var F: TTextRec): Integer;
begin
  case f.Mode of
    fmOutput: ConsoleOut(F);
    fmInput : ConsoleIn (F);
    fmInOut : ConsoleOut(F);
  end;
  result :=0;
end;

Function DevFlush(var F: TTextRec): Integer;
begin
  DevInOut(F);
  FillChar(F.Buffer,F.BufPos-1,0);
  F.BufPos := 0;
  result :=0;
end;

Function DevClose(var F: TTextRec): Integer;
begin
  result :=0;
end;


procedure AssignDev(var F: Text);
begin
  with TTextRec(F) do
  begin
    Mode := fmClosed;
    BufSize := SizeOf(Buffer);
    BufPtr := @Buffer;
    OpenFunc := @DevOpen;
    InOutFunc := @DevInOut;
    FlushFunc := @DevFlush;
    CloseFunc := @DevClose;
    Name[0] := #0;
  end;
end;

initialization
  ConsoleWin := TConsoleWnd.Create(0);
  ConsoleWin.Caption := system.ParamStr(0)+ ' - NVConsole';
  ConsoleWin.Show;
  consolewin.UseMessageThread := true;
  ConsoleWin.proto.AddLine('NonVCL Console v0.1 2005 ',$0,$00C000);
  ConsoleWin.proto.AddLine('',0,0);
  AssignDev(Output);
  AssignDev(Input);
finalization
  killed:= true;
end.

tadaa...
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#16

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 22:20
Deine Anwendung ist also bereits eine Fensteranwendung? In diesem Falle gibt es bereits eine Message-Loop und diese müßtest du benutzen. Ich ging davon aus, daß du mit Pipes arbeitest. Sieht aber nicht danach aus, wenn ich mir den obigen Code anschaue.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#17

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 22:56
nur dass das Fenster NonVCL is...

PS: also wenn da einer wäre hätte ich den selber programmiert und wüsste es
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#18

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 23:15
Zitat von hboy:
nur dass das Fenster NonVCL is...

PS: also wenn da einer wäre hätte ich den selber programmiert und wüsste es
Ist doch irrelevant ob es nonVCL ist. Wo steckt die Haupt-Messageloop?
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#19

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 11. Jan 2005, 23:29
es gibt keinen ! oder doch ?...
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#20

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 01:09
Zitat von hboy:
es gibt keinen ! oder doch ?...
Hoppala, da fehlen einem aber die Worte. Du solltest dir mal die Grundlagen der Win32-Programmierung (VCL und/oder nonVCL) anschauen. Natürlich gibt es eine Message-Loop. Da ich nicht weiß, wie du dein Fenster aufrufst, kann ich dir nicht sagen wo die Schleife steckt. Sie kann auch Implizit existieren, wenn du zB per DialogBoxParam() o.ä. ein Fenster erzeugst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 00:40 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