AGB  ·  Datenschutz  ·  Impressum  







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

Sprachausgabe in Thread

Ein Thema von iphi · begonnen am 27. Feb 2020 · letzter Beitrag vom 27. Feb 2020
Antwort Antwort
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#1

Sprachausgabe in Thread

  Alt 27. Feb 2020, 10:19
Delphi-Version: 7
Hallo,

ich versuche einen Thread zu schreiben, der einen String per Sprachausgabe ausgibt, aber ich bekomme beim Aufruf die EOIeException "CoInitialize wurde nicht aufgerufen", obwohl ich das explizit aufrufe.

Hier mein Thread-Code:
Delphi-Quellcode:
unit UThreadSpeak;

interface

uses
  Classes, ComObj, SysUtils, ActiveX;

type
  TSpeak = class(TThread)
  private
    { Private declarations }
    txt: string;
    stimme: Olevariant;
    destructor Destroy; override;
  protected
    procedure Execute; override;
  public
    constructor Create(text: string);
  end;

implementation

{ TSpeak }

constructor TSpeak.Create(text: string);
begin
inherited Create(true);
txt:=text;
FreeOnTerminate:=true;
CoInitialize(nil);
Stimme:=CreateOleObject('SAPI.SpVoice');
Suspended:=false;
end;

destructor TSpeak.Destroy;
begin
CoUninitialize;
inherited destroy;
end;

procedure TSpeak.Execute;
begin
  Stimme.speak(txt);
end;

end.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sprachausgabe in Thread

  Alt 27. Feb 2020, 10:23
Ich würde es mal so versuchen.
Code:
procedure TSpeak.Execute;
begin
  CoInitialize(nil);
  try
    Stimme.speak(txt);
  finally
    CoUninitialize;
  end;
end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Sprachausgabe in Thread

  Alt 27. Feb 2020, 10:27
Genau das. Setz dir doch einfach mal einen Haltepunkt im Debugger - Dann siehst du nur Execute auch wirklich das ist was im Thread ausgeführt wird. Create nicht, das wird natürlich im Kontext des Threads ausgeführt der Create auch aufruft.
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#4

AW: Sprachausgabe in Thread

  Alt 27. Feb 2020, 10:29
Danke, alles klar!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sprachausgabe in Thread

  Alt 27. Feb 2020, 10:48
Jupp, Create ist noch im startenden Thread und Destroy ... mal hier und mal da. (entsprechend FreeOnTerminate)
Nur Execute läuft im Thread und was "nur" in den Thread gehört, gehört auch nur dort rein.

Delphi-Quellcode:
inherited Create(true);
//und
Suspended:=false;
Brauchst nicht.
Wenn Suspended, dann wird der Thread sowieso erst im AfterCreate gestartet, also immer erst nach dem Create.
inherited Create(False); reicht also.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Feb 2020 um 10:52 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.075 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sprachausgabe in Thread

  Alt 27. Feb 2020, 11:20
Schonmal das versucht ?
  Mit Zitat antworten Zitat
Antwort Antwort


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