AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread verursacht Fehler

Ein Thema von Lefko · begonnen am 14. Nov 2003 · letzter Beitrag vom 17. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#11

Re: Thread verursacht Fehler

  Alt 17. Nov 2003, 08:53
Leider war den EKON-Slides nichts zu entnehmen, weshalb ich Chad angeschrieben habe und erst jetzt seine Antwort posten kann, weil ich dieses WE (ausnahmsweise einmal) nicht im Bureau war

Hier die Anwort:
Zitat:
:: My Question: Do you know about any problems that occur using the
:: default Delphi strings in a multithreaded environment without
:: these wrapper classes? (I believe you said that...)

Yes. You cannot access an unprotected string in ANY Delphi version, but D4 (And I think 5 and maybe even 6) did not have protection in the reference count areas.
gruß, choose
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Thread verursacht Fehler

  Alt 17. Nov 2003, 22:16
Zitat von choose:
@Lefko: Um es noch einmal zusammenzufassen. Die solltest den Thread Supended kreieren, und vorerst UniqueString verwenden. Außerdem empfiehlt es sich, den Aufruf des geerben Konstruktors als erste Anweisung in der überschriebenen Implementierung aufzurufen. Abschließend im Konstruktor dann Resume aufrufen.
Hi,
ich hab jetzt all die Tipps eingebaut, aber trotzdem kommt es zu einer AV!

hier der Text:

Delphi-Quellcode:
unit USoundThread;

interface

uses
  Classes, MMSystem;

type
  TSoundThread = class(TThread)
  private
    SoundPfad : string;
  protected
    procedure Execute; override;
  public
       { Public declarations }
    constructor Create(Pfad : string);
  end;

implementation

{ TSoundThread }

constructor TSoundThread.Create(Pfad : string);
begin
inherited Create(true);
UniqueString(Pfad); //Ab hier kommt die AV
SoundPfad := Pfad;
Resume;
//FreeOnTerminate := true;
end;

procedure TSoundThread.Execute;
begin
  { Place thread code here }
  sndPlaySound(PChar(SoundPfad), SND_ASYNC or SND_LOOP);
  //if terminated then break;
end;

end.
Was kann da noch zu Fehlern führen?!

MfG Lefko.
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Thread verursacht Fehler

  Alt 17. Nov 2003, 22:30
Keine Ahnung, was du da machst:
Delphi-Quellcode:
unit Unit2;

interface

uses
  MMSystem, Classes;

type
  TPlayWave = class(TThread)
  private
    { Private-Deklarationen }
  public
    FFilename: String;
    constructor Create(Filename: string);
  protected
    procedure Execute; override;
  end;

implementation

{ TPlayWave }

constructor TPlayWave.Create(Filename: String);
begin
  Inherited create(True);
  FFilename := Filename;
  FreeOnTerminate := True;
  Resume;
end;

procedure TPlayWave.Execute;
begin
  sndPlaySound(PChar(FFilename), SND_ASYNC);
end;

end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  WaveThread: TPlayWave;
begin
  WaveThread := TPlayWave.Create(ExtractFilepath(Paramstr(0))+ 'Beeth5th.wav');
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#14

Re: Thread verursacht Fehler

  Alt 17. Nov 2003, 22:39
Zitat von Lefko:
Delphi-Quellcode:
constructor TSoundThread.Create(Pfad : string);
begin
  inherited Create(true);
  UniqueString(Pfad); //Ab hier kommt die AV
  SoundPfad := Pfad;
  Resume;
  //FreeOnTerminate := true;
end;
Es sollte: UniqueString(SoundPfad) heißen und nach der Zuweisung stehen.
Zitat von Lefko:
Delphi-Quellcode:
procedure TSoundThread.Execute;
begin
  { Place thread code here }
  sndPlaySound(PChar(SoundPfad), SND_ASYNC or SND_LOOP);
  //if terminated then break;
end;
SND_ASYNC sorgt dafür, dass PlaySound() sofort zurückkehrt und der Sound im Hintergrund abgespielt wird (genau das, was Du willst). Dadurch ist der gesamte Aufwand - es in einen eigenen Thread zu packen - überflüssig.
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#15

Re: Thread verursacht Fehler [GELÖST]

  Alt 17. Nov 2003, 22:42
Hi Luckie ,

hm, ich Pappnase hab den Thread nur falsch kreiert.... Delphi hat es zwar nicht als Error gekennzeichnet, aber es führte immer zu ner AV.

statt SoundThread := TSoundThread.create(...)
hab ich SoundThread.Create verwendet...

Naja, so ist das als Noob


Danke, MfG Lefko.



PS: Da das Prog jetzt geht hab ich ein weiteres Problem festgestellt, zu dessen Beseitigung ich den Code eigentlich extra in den Thread verfrachtet hab...

Ich will mit dem Thread eine Hintergrundmusik abspielen, und dann soll, wenn die Schlange einen Apfel frisst, auch ein Sound abgespielt werden. Wenn dieser abgespielt wird, wird der Hintergrundsound abgebrochen

Eigentlich will ich zwei Musikdateien also gleichzeitig abspielen! (Hatte das auch mit einer 2. exe, die nur zum soundabspielen gestartet wurde, das war aber unpraktisch und sehr unelegant...)

Was könnte ich noch machen, damit es funktioniert?!?
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
Rumpi

Registriert seit: 26. Aug 2003
Ort: Berlin
72 Beiträge
 
#16

Re: Thread verursacht Fehler

  Alt 17. Nov 2003, 23:47
Hi,

über das vergessene 'T' und die resultierende AV
bin ich in den letzten Monaten auch mehrmals gestolpert.

mfg Rumpi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:07 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