AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Probleme mit Threads und deren übergabe (wartezeit)
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Threads und deren übergabe (wartezeit)

Ein Thema von BassFan · begonnen am 20. Jul 2006 · letzter Beitrag vom 21. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
BassFan
(Gast)

n/a Beiträge
 
#1

Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 17:34
Langsam komm ich nicht mehr klar..

Warum werden anweisungen die man in Delphi übergibt nicht sofort ausgeführt.
Wenn ich mein HWND erhalten habe warum kann ich es dann nicht direkt übergeben?

In VB gibt es die GET/LET funktionen
Was mit Let übergeben wird kann mit Get direkt ohne umwege zurück geholt werden.
Bei Delphi kommt Meldung : Linke seite kann nix zugewiesen werden.

Wenn ich einen neuen thread beginne warum wird dieser nicht erst abgearbeitet bevor
eine neue Function übergeben wird?

Der Code soll folgendermaßen abgearbeitet werden.

Thread erstellen mit BeginThread(xxx ..)
Im Thread! Sobald die Klasse Window erstellt ist ist auch das Handle des Window bekannt
dieses möchte ich ohne umwege direkt übergeben damit es der Anwendung bekannt ist
bevor das Plugin gestartet wird.

Ist zwar VB habe es aber mal mit Delphi Formatiert dann kann man es besser lesen.
Hier mal der Ablauf
Delphi-Quellcode:
        //Das ausgewählte Plugin starten
        If (lstPlugins.ListIndex >= 0) Then
            alist = Split(lstPathList.List(lstPlugins.ListIndex), ",")
            //Neuen Thread erstellen
            VisChan = BASS_WINAMPVIS_CreateVis(alist(0), CLng(Combo1.ListIndex), 0)
            //Song Titel übergeben
            Text1.Text = "Hmmmmmmm was nun."
            //Update intervall für Timer übergeben
            HScroll4.Enabled = False
            
            //Hwnd des Winamp Emulations Fenster erfragen
            hwndWinamp = BASS_WINAMPVIS_GetAmpHwnd
            lblWHandle = hwndWinamp
            //ShowWindow hwndWinamp, SW_SHOW
            
            //Position der Playliste setzen
            SendMessage ByVal hwndWinamp, WM_USER, ByVal PLPos, ByVal IPC_SETPLAYLISTPOS
            //Datei Infos übergeben
            //VisChan = Handle
            //Text1 = Title
            //Text2 = Filename
            //0 = Songposition
            //1800 = Songlänge
            //PLPos = Playlist Position
            //20 = Playlist Einträge
            BASS_WINAMPVIS_SetChanInfo VisChan, Text1, Text2, 0, 1800, PLPos, 20
            //Aktuell gesetze Playlist Position erfragen
            lblPos = Winamp_GetPlaylistPos

            //Timer einschalten
            If m_lId = 0 Then
                m_lId = timeSetEvent(HScroll4.Value, 300, AddressOf TimerProc, TimerhWnd, TIME_PERIODIC)
            End If
            //Plugin Windowhandle erfragen und zuweisen
            Label6.Caption = BASS_WINAMPVIS_GetVisHwnd
            
            //Wenn mehr als 0 Window Handle an MagneticWindow übergeben
            If Label6.Caption > vbNullString Then
                oMagneticWindow.AddWindow CLng(Label6.Caption), Me.hwnd
            End If
            
            Timer1.Enabled = True
            
        End If
Nach übergabe von CreateVis wird die function im Plugin nicht vollständig abgearbeitet
was bedeutet es findet schon die abfrage nach dem hwndWinamp statt welches
bis da noch nicht ermittelt wurde.

Ist Delphi so langsam ? oder wo liegt das Problem.

Delphi-Quellcode:
  WinAtom := Windows.RegisterClassEx(wClass);

  if WinAtom <> 0 then
    Result := CreateWindowEx(0, AppClass, AppTitle,
      WS_POPUP, // Kein Frame, Unsichtbar
      0, 0, 275, 116, // x, y, width, height
      {parent} 0, 0, hInst, nil)
  else
    Result := 0;


  // Hwnd von der ausführenden Anwendung
  if AppParentHandle <> 0 then
  begin
    AmpHandle := 0;
    VisPlgHandle := Result;

    repeat
       amphandle := BASS_WINAMPVIS_GetAmpHwnd;
    until amphandle <> 0;
Sobald das Window erstellt wurde ist das amphandle bekannt
Wird aber wie schon beschrieben vorher abgefragt..
Das kann es doch nicht sein.

WIe reglet man das in Delphi das die Reihenfolge abgearbeitet wird und nicht alles auf einmal.

gruß
da
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bekomme die Krise

  Alt 20. Jul 2006, 18:13
Moin da,

ändere bitte mal den Titel Deines Threads.
Mit "Bekomme die Krise" kann keiner etwas anfangen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Bekomme die Krise

  Alt 20. Jul 2006, 18:33
Hi,
ich finde es schön, dass du dir Mühe gibt's mein Bild von VB Programmierern zu stärken

Da ich deinen Quellcode doch etwas schlecht lesbar finde, noch mal kurz zu deinem Problem. Du möchtest einen Thread starten und mit einem Ergebnis aus dem Thread weiterarbeiten?
Also wenn du fragst ob Delphi so langsam ist, ganz ehrlich, ich würde sagen du hast Threads noch nicht verstanden. Du solltest dich freuen, wenn es bei dir nicht klappt! Schlimmer ist es, wenn es (rein zufällig) bei dir funktionieren würde und so ein Produkt mal verkauft wird. Bei nebenläufigen Prozessen kannst du nicht selbst festlegen, wann diese ausgeführt werden. Wenn du auf ein bestimmtes Ergebnis warten möchtest, dann solltest du einfach darauf warten! Dafür gibt es Methoden, die können auf gewisse Signale warten.
Was atomar in einem Thread (auf einmal) stattfinden soll, legt man über Sperrsynchronisation fest (kenn ich so in jeder Sprache). Das du in einer anderen Sprache bei einem Thread eine gewisse Anzahl von Schritten in diesem Thread zusichern kannst, bevor es zur weiteren Abarbeitung in einem anderen Thread kommt gibt es nicht. Das ist gerade das, was Threading so fehleranfällig macht.
Ich würde dir dringend raten, dich erst mit den Grundlagen des Threadings zu beschäftigen. Dann verstehst du (hoffentlich) schnell, dass du dich nie auf irgendwas verlassen solltest, was du nicht selbst festlegst. Die Fehler die du dir sonst in deinen Code holst sind echt schwer zu debuggen. Könnte dann auch sein dass es einfach 200 mal gut geht und die nächsten Male immer knallt, nur leider nie wenn du gerade debuggst...

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Bekomme die Krise

  Alt 20. Jul 2006, 18:34
Hallo BassFan,

ich geh mal nur auf deine allgemeinen Probleme mit Delphi ein und nicht auf deinen VB-Quellcodeauszug. Dazu müsstest Du noch erklären was die einzelnen Funktionen wie BASS_WINAMPVIS_CreateVis machen:

Zitat:
Warum werden anweisungen die man in Delphi übergibt nicht sofort ausgeführt.[/delphi]
Werden sie. Gib ein Beispiel das dies nicht wäre.

Zitat:
Wenn ich mein HWND erhalten habe warum kann ich es dann nicht direkt übergeben?
Wohin direkt übergeben? Ein Win32-API aufzurufen oder was?

Zitat:
In VB gibt es die GET/LET funktionen
Was mit Let übergeben wird kann mit Get direkt ohne umwege zurück geholt werden.
Das gibt es in Delphi als properties auch.

Zitat:
Bei Delphi kommt Meldung : Linke seite kann nix zugewiesen werden.
Dann wird es wohl ein Read-Only-Property sein. Ein Fensterhandle (Handle-Property von TWinControl-Komponenten) kannst Du nicht zuordnen da dies ja im Konstruktor der Komponenten mittels Win32-API-Funktionen geholt wird und ein Zuweisen eines anderen Wertes das Fensterhandling von Windows und Delphi durcheinander bringen würde.

Zitat:
Wenn ich einen neuen thread beginne warum wird dieser nicht erst abgearbeitet bevor
eine neue Function übergeben wird?
Ich glaube du verwechselt etwas. Der Sinn eines Threads ist doch die unabhängige Abarbeitung einer Aufgabe.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
BassFan
(Gast)

n/a Beiträge
 
#5

Re: Bekomme die Krise

  Alt 20. Jul 2006, 19:15
Hi
Zitat:
Dazu müsstest Du noch erklären was die einzelnen Funktionen wie BASS_WINAMPVIS_CreateVis machen:
BASS_WINAMPVIS_CreateVis beginnt einen neuen Thread (ThreadHandle := BeginThread(nil, 0, @WinampVisWin, VisInfo, 0, ThreadId);)

Zitat:
Werden sie. Gib ein Beispiel das dies nicht wäre.
Hier.
Delphi-Quellcode:
    repeat
       amphandle := BASS_WINAMPVIS_GetAmpHwnd;
    until amphandle <> 0;
Ohne diese schleife kann die Hauptanwendung das HWND nicht schnell genug in erfahrung bringen.

Zitat:
Wohin direkt übergeben? Ein Win32-API aufzurufen oder was?
An meine Hauptanwendung.
Diese holt sich das HWND über die Function
Delphi-Quellcode:
function BASS_WINAMPVIS_GetAmpHwnd: DWORD; stdcall;

begin
    //repeat
    Result := VisPlgHandle;
    //until VisPlgHandle <> 0
end;
Zitat:
Das gibt es in Delphi als properties auch.
Bitte ein Beispiel.

Zitat:
Dann wird es wohl ein Read-Only-Property sein. Ein Fensterhandle (Handle-Property von TWinControl-Komponenten) kannst Du nicht zuordnen da dies ja im Konstruktor der Komponenten mittels Win32-API-Funktionen geholt wird und ein Zuweisen eines anderen Wertes das Fensterhandling von Windows und Delphi durcheinander bringen würde.
Würde ich das HWND =BASS_WINAMPVIS_GetAmpHwnd
über Property GET/LET übergeben und lesen können wäre mir schon geholfen.
Kenne die Befehlsstruktur dafür in Delphi nicht.

Zitat:
Ich glaube du verwechselt etwas. Der Sinn eines Threads ist doch die unabhängige Abarbeitung einer Aufgabe.
Ja Sorry mein Problem generell kenn mich in Delphi nicht so aus.
Möchte aber gerne lernen soweit ich konstuktive Informationen erhalte.

Gruß
  Mit Zitat antworten Zitat
BassFan
(Gast)

n/a Beiträge
 
#6

Re: Bekomme die Krise

  Alt 20. Jul 2006, 19:17
Zitat von Der_Unwissende:
Hi,
ich finde es schön, dass du dir Mühe gibt's mein Bild von VB Programmierern zu stärken

Da ich deinen Quellcode doch etwas schlecht lesbar finde, noch mal kurz zu deinem Problem. Du möchtest einen Thread starten und mit einem Ergebnis aus dem Thread weiterarbeiten?
Also wenn du fragst ob Delphi so langsam ist, ganz ehrlich, ich würde sagen du hast Threads noch nicht verstanden. Du solltest dich freuen, wenn es bei dir nicht klappt! Schlimmer ist es, wenn es (rein zufällig) bei dir funktionieren würde und so ein Produkt mal verkauft wird. Bei nebenläufigen Prozessen kannst du nicht selbst festlegen, wann diese ausgeführt werden. Wenn du auf ein bestimmtes Ergebnis warten möchtest, dann solltest du einfach darauf warten! Dafür gibt es Methoden, die können auf gewisse Signale warten.
Was atomar in einem Thread (auf einmal) stattfinden soll, legt man über Sperrsynchronisation fest (kenn ich so in jeder Sprache). Das du in einer anderen Sprache bei einem Thread eine gewisse Anzahl von Schritten in diesem Thread zusichern kannst, bevor es zur weiteren Abarbeitung in einem anderen Thread kommt gibt es nicht. Das ist gerade das, was Threading so fehleranfällig macht.
Ich würde dir dringend raten, dich erst mit den Grundlagen des Threadings zu beschäftigen. Dann verstehst du (hoffentlich) schnell, dass du dich nie auf irgendwas verlassen solltest, was du nicht selbst festlegst. Die Fehler die du dir sonst in deinen Code holst sind echt schwer zu debuggen. Könnte dann auch sein dass es einfach 200 mal gut geht und die nächsten Male immer knallt, nur leider nie wenn du gerade debuggst...

Gruß Der Unwissende
Danke für das Maßregeln !
Hilft mir aber in keiner weise irgendwie weiter..
Also Dekonstruktiv

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 20:41
@BassFan: benutze nächstes mal bitte die "Edit"-Funktion wenn du deinem letzten Beitrag etwas hinzufügen willst ohne das zwischenzeitlich jemand anderes was geschrieben hast oder 24 stunden seit deinem leiten Beitrag vergangen sind. Ansonsten nennt man das pushen was hier nicht erlaubt ist. Desweiteren möchte ich dich bitten deinem Thema einen aussagekräftigen Titel zu verleihen so wie es die Forenregeln besagen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
BassFan
(Gast)

n/a Beiträge
 
#8

Re: Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 20:59
Zitat von SirThornberry:
@BassFan: benutze nächstes mal bitte die "Edit"-Funktion wenn du deinem letzten Beitrag etwas hinzufügen willst ohne das zwischenzeitlich jemand anderes was geschrieben hast oder 24 stunden seit deinem leiten Beitrag vergangen sind. Ansonsten nennt man das pushen was hier nicht erlaubt ist. Desweiteren möchte ich dich bitten deinem Thema einen aussagekräftigen Titel zu verleihen so wie es die Forenregeln besagen.
Welcher Titel ist denn genehm ?
Habe ihn schon geändert von Langsam bekomme ich die Krise nach ,,,, Probleme mit Threads und deren übergabe (wartezeit)
Was ist da nun nicht aussagekräftig genug?

Benutze immer den Edit Knopf wenn ich etwas im Artikel ändern möchte.
Neue Frage neuer Artikel.
Was ist daran verkehrt.. Oder kann es sein das man mich hier herauspushen will ? Mobbing nennt man das
wenn man hinter jemanden her ist der nichts verbrochen hat.

Oder sollte ich hier jemand beleidigt haben ?

gruß
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 21:06
Der Titel ist genehm, es war mein Fehler, hatte mich da vertan.
Zitat:
Benutze immer den Edit Knopf wenn ich etwas im Artikel ändern möchte.
Neue Frage neuer Artikel.
Was ist daran verkehrt.. Oder kann es sein das man mich hier herauspushen will ? Mobbing nennt man das
wenn man hinter jemanden her ist der nichts verbrochen hat.
Neue Frage = Neuer Artikel ist richtig sofern du mit Artikel das Thema meinst.
Allerdings hast du 19:15 gepostet und 19:17 wieder ohne etwas neues zum Thema beizutragen. Durch den neuen Beitrag kommt dein Thema auf auf der Portalseite nach ganz oben und andere Beiträge verschwinden dahinter. Aus diesem Grund ist das sogenannte Pushen bei uns erst nach 24 Stunden erlaubt oder wenn es etwas neues gibt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
BassFan
(Gast)

n/a Beiträge
 
#10

Re: Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 21:12
Zitat von SirThornberry:
Der Titel ist genehm, es war mein Fehler, hatte mich da vertan.
Zitat:
Benutze immer den Edit Knopf wenn ich etwas im Artikel ändern möchte.
Neue Frage neuer Artikel.
Was ist daran verkehrt.. Oder kann es sein das man mich hier herauspushen will ? Mobbing nennt man das
wenn man hinter jemanden her ist der nichts verbrochen hat.
Neue Frage = Neuer Artikel ist richtig sofern du mit Artikel das Thema meinst.
Allerdings hast du 19:15 gepostet und 19:17 wieder ohne etwas neues zum Thema beizutragen. Durch den neuen Beitrag kommt dein Thema auf auf der Portalseite nach ganz oben und andere Beiträge verschwinden dahinter. Aus diesem Grund ist das sogenannte Pushen bei uns erst nach 24 Stunden erlaubt oder wenn es etwas neues gibt.
Verstehe ich nicht Sorry diese Argumentation.

19.15 habe ich auf das Thema von 'Bernhard Geyer' geantwortet.
19.17 auf das von 'Der_Unwissende'

Also beide sind eine Antwort würdig. Oder ?
Nun in aller Freundschaft was hat das mit Pushen zu tun.

gruß
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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