Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#8

AW: performance c++ <> Delphi

  Alt 9. Aug 2017, 16:55
Zitat:
Bischen wirr geschrieben der Beitrag (so wie meine meist.)
Kein Ahnung was du wirr meinst noch deutlicher kann man das nicht formulieren.

Wenn man überhaupt nicht weis was diese DLL und die Anwendung macht, kann man mit der Beschreibung nicht viel anfangen.

Eine Möglichkeit wäre z.B., die DLL ruft innerhalb eine Threads das Event auf.
Die Anwendung möchte im Event auf die VCL zugreifen.
Dann könnte der Eventhandler per PostMessage die Nachricht an den Hauptthread weiter leiten, der das darf.
Ich weis was er macht.
Also nochmal!

Meine DLL schickt ein Event an die Anwendung welche C++ verwendet.
Die Funktion die das Event signalisiert.
Code:
BOOL KVIDEOPLAYERDEF(KVideo_Initialize)(HWND MediaWindow, BOOL UseOverlay, CBEventNotice event);
Meine Reverenz.
Code:
typedef void(__stdcall *CBEventNotice)(TPlayerEvent);
sein Reverenz.
Code:
typedef void( *CBEventNotice)(TPlayerEvent);
er meint er braucht __stdcall nicht weil die Referenz selbst bei ihm nie aufgerufen wird.

Die CallBack bei mir.. funktioniert ohne Probleme.
Code:
void __stdcall OnPlayerEvent(TPlayerEvent event)
{
    if (event == PlayEnded)
    {
        KillTimer(MovieHandle, MOVIE_TIMER);
        // IMediaSeeking mach probleme wenn Position weniger dann auf Max setzen
        INT64 MaxPos = (aMediaProperty.PlaybackLength / 10000) / 1000;
        if (Position < MaxPos)
            SetScrollPos(MovieHandle, SBS_HORZ, (int)MaxPos, TRUE);
        else
            SetScrollPos(MovieHandle, SBS_HORZ, 0, TRUE);
    }
}
Die Callback bei ihm.
Code:
void __stdcall OnPlayerEvent(TPlayerEvent event)
{
    if (event == PlayEnded)
    {
         if (CheckLoopMode()) {
            KVideo_Play();
         } else {
            SetStatusText(L"Closed");
            DisableRestoreState();
            Media_Stopped();
         }
    }
}
Hier soll es jetzt krachen wenn er seinen Slider schnell zum Ende bewegt.
Er hat das jetzt so umgangen.
Code:
void CALLBACK OnPlayerEvent(TPlayerEvent event) {
    PostMessage(hMain, WM_COMMAND, MAKLNG(IDC_PLAYENDED, 0), NULL);
}
WinProc
Code:
        case IDC_PLAYENDED:
            if (CheckLoopMode()) {
                KVideo_Play();
            } else {
                SetStatusText(L"Closed");
                DisableRestoreState();
                Media_Stopped();
            }
            break;
er ist der Meinung das es an Delphi liegt.
wäre zu langsam.

Zudem gäbe es das Problem das meine DLL synchron und MF asynchron laufen das wäre das Problem warum meine DLL zu viel CPU verwenden würde beim abspielen der Videos.

Zitat:
Verwendest du in deiner Dll oder er in seinem Programm mehrere Threads?
Ich nicht er schon.


gruss

Geändert von EWeiss ( 9. Aug 2017 um 17:23 Uhr)
  Mit Zitat antworten Zitat