Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi was machen mit den Hangups ? Konsolenprobleme die zweite ^ ^ (https://www.delphipraxis.net/37700-machen-mit-den-hangups-konsolenprobleme-die-zweite-%5E-%5E.html)

Assarbad 15. Jan 2005 16:30

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
Zitat:

Zitat von hboy
OK.
------------------------------------
Frage1: gibt es eine Möglichkeit Messages von fremden Threads zu holen und zu verarbeiten ?

Es schaut so aus, dass im Hauptthread ein Fenster erzeugt wird, und wenn der Hauptthread hängt, sollen die Messages an das Fenster weiterhin abgearbeitet werden.
Packe ich die Erzeugung des Fensters in einen separaten Thread, ergibt sich das Problem, dass wiederum von dem Thread mit Fenster auf globale Variablen (Input und Output) zugegriffen (AssignDev) wird, was allerdings zu Fehlern führt.

Frage2: wie löse ich das Problem wenn es keine Möglichkeit zu Frage1 gibt ?

Ein Message-Hook (Typ: WH_GETMESSAGE) könnte helfen. Dann mußt du aber manuall aus der Hookfunktion deine Fensterfunktion aufrufen. So richtig kann ich es mir nicht vorstellen, weil dies Aufgaben des Systems sind.

hboy 15. Jan 2005 19:32

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
das ist doch gequirlte sch****

Wenn der Thread hängt wird auch die HookProc nicht mehr aufgerufen... jetzt hab ich den ganzen Müll umsonst gemacht. Windows ist scheiße ! jawohl.

HauptProgramm
Delphi-Quellcode:
  while true do; // hangup

Hook:

Delphi-Quellcode:
function MainHookProc(code: Integer ; wP:LPARAM ; lP: WPARAM): LRESULT; stdcall;
var msg: ^TMsg;
var winproc: Pointer;
var uintwndproc: Cardinal;
begin
  if code <0 then
      result := windows.CallNextHookEx(0,code,wp,lp)
  else
    begin
      msg := Pointer(lP);
      if msg^.message = wm_char then windows.TerminateProcess(windows.GetCurrentProcess,0);
    end;
end;
also müsste das gute stück beenden wenn ich auch nur eine taste drück. Tuts aber nicht.

Assarbad 15. Jan 2005 21:33

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
Probier mal:
Delphi-Quellcode:
  while true do Sleep(0); // hangup
... dann bekommen andere Threads im gleichen Programm auch mal ne Chance was zu machen.

Wie gesagt, in einer echten Konsole wird der Konsolenteil nicht mit Fensternachrichten usw. betrieben. Das wird aktuell dein Problem sein, auch wenn du natürlich unbedingt die komplette Funktionalität nachbauen willst (warum auch immer :-\).

hboy 15. Jan 2005 22:18

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
*anmerk*
while true do;
war nur ein Beispiel für einen Hangup. Es kann sich natürlich auch um rechenintensive und komplexe Prozeduren handeln, die z.B. bei einer Fouriertransformation einer 500MB großen Datei etwas dauern können. Nun will ich die Konsole in dem Zeitraum auch noch bewegen/minimieren/maximieren/schließen können.

Also wie ?
Es gibt probleme mit dem ConsoleIn und ConsoleOut wenn das Fenster in einem separaten Thread erzeugt wird ( und dort dann auch eine Nachrichtenschleife läuft.
Wie krieg ich das in den Griff ?
Unter Probleme verstehe ich einen gewissen "Fehler 105" der dann auftritt. Ich vermute, dass dafür ausschlaggebend ist, welcher Thread das Objekt ConsoleWin erzeugt

hboy 15. Jan 2005 22:45

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
ich glaub so ein Thread *g* also das Thema hier sucht seinesgleichen ^^ 3 seiten und der lösung noch keinen fatz näher..

http://msdn.microsoft.com/library/de...hreadinput.asp

wasn das oO

Assarbad 16. Jan 2005 01:26

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
Zitat:

Zitat von hboy
ich glaub so ein Thread *g* also das Thema hier sucht seinesgleichen ^^ 3 seiten und der lösung noch keinen fatz näher..

Keine Angst, ich gebe bald auf --- wer das Rad neu erfindet, muß eben mit Problemen rechnen.

Zitat:

Zitat von hboy
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/attachthreadinput.asp

Könnte eine Variante sein. Probier es mal. Aber rufe aus deinem Thread für die Konsole vorher mindestens eine der besagten Funktionen auf um eine Queue zu erzeugen.

hboy 16. Jan 2005 10:42

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
öh ja und die wäre ? Muss ich da nochmal ein Fenster erzeugen oder was muss ich da tun ?

Assarbad 16. Jan 2005 12:51

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
Zitat:

Zitat von hboy
öh ja und die wäre ? Muss ich da nochmal ein Fenster erzeugen oder was muss ich da tun ?

Ich dachte du erzeugst in dem Thread schon das Konsolenfenster? Das wäre doch der entsprechende Aufruf zu einer der USER oder GDI-Funktionen.

hboy 16. Jan 2005 13:00

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
ich verfrachte das immer wieder hin und her.. hab ja geschrieben dass es, wenn ich das Fenster in nem neuen Thread erzeug, zu Fehlern bei ConsoleIn und ConsoleOut kommt.. also funzt das schon mal nicht, es sei denn ich sende Messages zwischen Threads und bastel neue in/out prozeduren

hboy 26. Jan 2005 00:40

Re: was machen mit den Hangups ? Konsolenprobleme die zweite
 
hey freaks ! hab jetzt den ganzen murks in nen extra thread gepackt ! tut fast :) aber schon schwer geil. nachmachen empfohlen ( damit es hier au mal zu nem Ergebnis kommt )! :coder2:


gute nacht :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.
Seite 5 von 5   « Erste     345   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz