Einzelnen Beitrag anzeigen

BassFan
(Gast)

n/a Beiträge
 
#1

Probleme mit Threads und deren übergabe (wartezeit)

  Alt 20. Jul 2006, 16: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