AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Threads

Ein Thema von Nils_13 · begonnen am 28. Jan 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
Seite 2 von 4     12 34      
Robert Marquardt
(Gast)

n/a Beiträge
 
#11

Re: Problem mit Threads

  Alt 28. Jan 2007, 16:23
Mitdenken. Ich wette mal StatusProc ist auch nicht als stdcall deklariert.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#12

Re: Problem mit Threads

  Alt 28. Jan 2007, 16:46
Könnt ihr mir sagen, warum mir Delphi abschmiert, wenn ich stdcall; benutze ? Einmal neugestartet (RESTARTTASTE) und eben gerade noch so, mit dem ausnahmsweise nicht abgestürzten Taskmanager, gerettet.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:26
Es koennte sein das die bass.dll cdecl statt stdcall will. Also StatusProc mal probeweise mit cdecl statt stdcall deklarieren.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#14

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:34
Hmm...ich habe gerade herausgefunden, dass OpenURL Delphi aufhängt, wenn dort ein stdcall; steht, bei cdecl; passiert hingegen überhaupt nichts. StatusProc funktioniert mit stdcall.
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#15

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:41
Hast du Speicher reserviert für den Parameter?
Sonst ist es klar, dass es knallt.

Delphi-Quellcode:
procedure TfrmMain.lvDblClick(Sender: TObject);
var
  p: PChar;
begin
  GetMem(p, Length(urls[0]) +1); // Speicher reservieren, da eine lokale Variable nach Durchlauf der Funktion/Prozedur nicht mehr besteht
  StrPCopy(p, urls[0]);
  cthread := StartPlayStream(p);
end;



function OpenURL(url: PChar) : Integer;
var
  icy: PChar;
  Len, Progress: DWORD;
begin
  Result := 0;

// restlicher Code hier...

  FreeMem(url); // Speicher wieder freigeben
end;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#16

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:44
Das verwundert mich jetzt aber sehr. Ich habe nochmal bei meinem D6 nachgeschaut und TThreadFunc sollte weder stdcall noch cdecl haben.
Ich habe nicht realisiert das BeginThread ja eine Delphifunktion ist und keine Win32-Funktion.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#17

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:48
ste_ett, wenn man den Speicher alloziiert, dann sollte man ihn auch wieder freigeben. p als lokale Variable ist also schlecht.
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#18

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:51
Zitat von Robert Marquardt:
Das verwundert mich jetzt aber sehr. Ich habe nochmal bei meinem D6 nachgeschaut und TThreadFunc sollte weder stdcall noch cdecl haben.
Ich habe nicht realisiert das BeginThread ja eine Delphifunktion ist und keine Win32-Funktion.
BeginThread ruft intern aber auch nur CreateThread auf und der Parameter wird indirekt weitergegeben.

Als Parameter wird ThreadProc erwartet oder NULL, wenn keine Parameter übergeben wwerden sollen.

Code:
HANDLE WINAPI CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);

DWORD WINAPI ThreadProc(
  LPVOID lpParameter
);
WINAPI ist als __stdcall definiert.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#19

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:55
Zitat von Robert Marquardt:
ste_ett, wenn man den Speicher alloziiert, dann sollte man ihn auch wieder freigeben. p als lokale Variable ist also schlecht.
s. letzte Zeile in OpenURL().
Die Speicheradresse hat man über den Parameter der Funktion, von da her ist es über eine lokale Variable möglich, da der Ort, auf den der Zeiger zeigt, nicht verloren geht.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#20

Re: Problem mit Threads

  Alt 28. Jan 2007, 17:56
Ich habe deinen Code instgesamt 3x angwendet (also ausgeführt):
1: Ungültige Zeigeroperation, wegklickbar, kein Absturz
2: Ungültige Zeigeroperation, wegklickbar, Absturz
3: Ungültige Zeigeroperation, wegklickbar, Absturz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 22: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