Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CreateThread Win7 (https://www.delphipraxis.net/161808-createthread-win7.html)

EWeiss 21. Jul 2011 19:16

CreateThread Win7
 
Seltsames problem

Beim erstellen eines Threads beendet meine Anwendung ohne eine Meldung auszugeben innerhalb der IDE beim debuggen.
Stelle ich den Kompatibilitätsmodus der bds.exe auf WinXp servp.3 dann funktioniert alles so wie gewohnt.

Kennt das jemand?

gruss

daywalker9 21. Jul 2011 19:24

AW: CreateThread Win7
 
Wie siehts bei MSDN-Library durchsuchenBeginThread aus?

Edit: Mal schnell was gebastelt, funktioniert bei mir auch Win7 im Debugger.

EWeiss 21. Jul 2011 19:39

AW: CreateThread Win7
 
Zitat:

Zitat von daywalker9 (Beitrag 1112919)
Wie siehts bei MSDN-Library durchsuchenBeginThread aus?

Edit: Mal schnell was gebastelt, funktioniert bei mir auch Win7 im Debugger.

Man achte auf meine Delphi Version ;)
BeginThread funktioniert nicht so wie mit CreateThread

Delphi-Quellcode:
ThreadHandle := CreateThread(nil, 0, @BassVisNewThread, pointer(ModuleNum),
                             0, DriveThreadId);
Mit eingestellten Kompatibilitätsmodus geht es ja aber dann ist mein Window = Xp wenn ich das OS gegenprüfen will.

Also sobald ich in der EXE ein Plugin oder aber nur einen Ordner mit Dateien öffnen will
wird das Debuggen beendet ohne das die IDE abstürzt oder irgendeine Meldung kommt.

Da stellt sich die Frage... Ob es überghaupt mit dem Thread zu tun hat.
Beendet ja schon wie gesagt bei der auswahl eines Ordners. bzw. beim Klick auf meinem Add-Button.
Hmmm ...

gruss

Luckie 21. Jul 2011 21:18

AW: CreateThread Win7
 
Zitat:

Zitat von EWeiss (Beitrag 1112920)
BeginThread funktioniert nicht so wie mit CreateThread

Falsch. BeginThread ruft auch nur unter anderem CreateThread. Setzt habe noch IsMultiThread auf True, um den Heap Threadsafe zu machen:
Delphi-Quellcode:
function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
  ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
  var ThreadId: LongWord): Integer;
var
  P: PThreadRec;
begin
  if Assigned(SystemThreadFuncProc) then
    P := PThreadRec(SystemThreadFuncProc(ThreadFunc, Parameter))
  else
  begin
    New(P);
    P.Func := ThreadFunc;
    P.Parameter := Parameter;
  end;
  IsMultiThread := TRUE;
  Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
    CreationFlags, ThreadID);
end;

EWeiss 21. Jul 2011 21:52

AW: CreateThread Win7
 
Und wo ist PThreadRec Definiert so das ich das mal testen kann?

gruss

Luckie 21. Jul 2011 21:53

AW: CreateThread Win7
 
In der gleiche Unit.Wenn du die Sourcen hast, sollte das schnell zu finden sein.

EWeiss 21. Jul 2011 22:11

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112932)
In der gleiche Unit.Wenn du die Sourcen hast, sollte das schnell zu finden sein.

Sorry hab den Source nicht von dem Wrapper..

gruss

Luckie 21. Jul 2011 22:17

AW: CreateThread Win7
 
Bei der Architect Version sind keine Quellen dabei?

EWeiss 21. Jul 2011 22:26

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112941)
Bei der Architect Version sind keine Quellen dabei?

Jetzt läßt du mich aber Raten ;)
Ich habe keine Samples installiert wenn du das meinst.

Ansonsten habe ich es in der System.pas gefunden.
Aber die muss doch nicht extra eingebunden werden oder?

Wird auf jedenfall bei mir nicht erkannt.

gruss

Luckie 21. Jul 2011 22:31

AW: CreateThread Win7
 
Delphi-Quellcode:
type
  PThreadRec = ^TThreadRec;
  TThreadRec = record
    {
      WARNING: Don't change these fields without also changing them in
      the C++ RTL : winrtl/source/vcl/crtlvcl.cpp
    }
    Func: TThreadFunc;
    Parameter: Pointer;
  end;
Strg drücken und auf den Datentpy klicken. Funktioniert auch bei BeginThread.

EWeiss 21. Jul 2011 22:34

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112944)
Delphi-Quellcode:
type
  PThreadRec = ^TThreadRec;
  TThreadRec = record
    {
      WARNING: Don't change these fields without also changing them in
      the C++ RTL : winrtl/source/vcl/crtlvcl.cpp
    }
    Func: TThreadFunc;
    Parameter: Pointer;
  end;
Strg drücken und auf den Datentpy klicken. Funktioniert auch bei BeginThread.

Ja habe ich wird aber nicht gefunden..
Obwohl es in der System.pas so deklariert ist.

Verwende jetzt mal dein Schnipsel hier zum testen.
Da ist was wrong Undeklariert "ThreadWrapper"

Siehe Pic

gruss

Luckie 21. Jul 2011 22:47

AW: CreateThread Win7
 
Ich habe Delphi 2006 Entenscheiß. Da ist alles in Ordnung. Kann es sein, dass es fälschlicherweise als fehlerhaft markiert wurde? Aber für BeginThread musst du nichts einbinden, wenn es in der System.pas deklariert ist.

EWeiss 21. Jul 2011 22:56

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112947)
Ich habe Delphi 2006 Entenscheiß. Da ist alles in Ordnung. Kann es sein, dass es fälschlicherweise als fehlerhaft markiert wurde? Aber für BeginThread musst du nichts einbinden, wenn es in der System.pas deklariert ist.

Arghhh ..
Ja klar war jetzt etwas verdutzt da du die Funktion hier gepostet hast.
Da sie ja in der System.pas enthalten ist war das natürlich zum scheitern verurteilt diese nochmal extra einzubinden.

Aber wie gesagt mit BeginThread kann ich keine Visualisierung starten das funktioniert einfach nicht.
Was ist der Unterschied?

Delphi-Quellcode:
ThreadHandle := CreateThread(nil, 0, @BassVisNewThread, pointer(ModuleNum),
                             0, DriveThreadId);
Delphi-Quellcode:
ThreadHandle := BeginThread(nil, 0, @BassVisNewThread, pointer(ModuleNum),
                             0, DriveThreadId);
???

gruss

Luckie 21. Jul 2011 23:01

AW: CreateThread Win7
 
Wenn du BeginThread nutzt, darf die Thread-Funktion nicht als stdcll deklariert sein, glaube ich.

EWeiss 21. Jul 2011 23:08

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112949)
Wenn du BeginThread nutzt, darf die Thread-Funktion nicht als stdcll deklariert sein, glaube ich.

Ahh jo das muss man natürlich wissen.
Ok hab es jetzt geändert und denke ist besser als CreateThread aber mein Problem ist damit nicht geklärt.
Sobald ich den kompatibilitätsmodus ausschalte kann ich nicht mehr debuggen.

Sobald ich auf den Button Add(Dateien addieren) klicke (unabhängig von der DLL)
oder eine Visualisierung starten will DLL abhängig verabschiedet sich der Debugger.. bzw die Anwendung beendet und geht zurück in die IDE

PS:
Bei BeginThread ... ExitThread(0) oder EndThread verwenden?

gruss

Luckie 21. Jul 2011 23:13

AW: CreateThread Win7
 
Was passiert, wenn du die Anwneduing ohne den Debugger aus dem Explorer startest? Man darf nicht vergessen, dass die Visualisierung eine zusätzliche Komplexibilitätsschicht verursacht. keine Ahnung, was da abläuft. kannst das ganze auch ohne die Visualisierung testen in einer VM oder so? ansonsten, weiß ich da jetzt auch nicht weiter. Tut mir leid.

EWeiss 21. Jul 2011 23:16

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112951)
Was passiert, wenn du die Anwneduing ohne den Debugger aus dem Explorer startest? Man darf nicht vergessen, dass die Visualisierung eine zusätzliche Komplexibilitätsschicht verursacht. keine Ahnung, was da abläuft. kannst das ganze auch ohne die Visualisierung testen in einer VM oder so? ansonsten, weiß ich da jetzt auch nicht weiter. Tut mir leid.

Normal gestartet als Anwendung gibt es keine Probleme
Kann halt ohne den XP Modus nicht debuggen.
Egal welche Funktion ich ausführe das teil geht zurück in die IDE

grrr.. :)

Danke!

gruss

Luckie 21. Jul 2011 23:23

AW: CreateThread Win7
 
Schieße. Dann würde mir nur noch einfallen per ShowMessage zu debuggen, wenn es denn erforderlich ist. Natürlich eingefasst von Compilerdirektiven, damit du sie nicht alle wieder rauslöschen musst.

EWeiss 21. Jul 2011 23:27

AW: CreateThread Win7
 
Zitat:

Zitat von Luckie (Beitrag 1112955)
Schieße. Dann würde mir nur noch einfallen per ShowMessage zu debuggen, wenn es denn erforderlich ist. Natürlich eingefasst von Compilerdirektiven, damit du sie nicht alle wieder rauslöschen musst.

Ich glaube bald das liegt an D2009 selbst das kann nicht mit Win7 zusammenarbeiten.
Was anderes fällt mir da jetzt auch nicht ein.

Danke für deine Hilfe.. muss dann halt mit dem Kompatibilitätsmodus XP weiter arbeiten.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 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