Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   performance c++ <> Delphi (https://www.delphipraxis.net/193516-performance-c-delphi.html)

EWeiss 9. Aug 2017 15:50

performance c++ <> Delphi
 
Kurze Frage.

Wie hoch ist die Wahrscheinlichkeit das beim senden eines Event aus einer Delphi DLL C++ sich verschlucken kann und es zu einem Absturz der Anwendung kommt.
Gibt es Statistiken?

Mir möchte jemand erzählen das wenn er seine Scrollbar sehr schnell zum Ende bewegt wenn ein Movie spielt seine Anwendung dabei abstürzt.

Und sein Fix wäre im Event eine Postmessage an seine Winproc zu senden und dort erst den Code auszuführen
der eigentlich in das Event gehört.

Er ist der Meinung man könnt das nur beheben wenn man meine DLL nach C++ portiert (mache ich nicht)

gruss

freimatz 9. Aug 2017 16:03

AW: performance c++ <> Delphi
 
Kurze Antwort: Nein.

Bischen wirr geschrieben der Beitrag (so wie meine meist.)

Wie kann man ein Event an C++ schicken? C++ ist eine Programmiersprache :wink:

Wenn es um Probleme gibt und Postmessage ist im Spiel ist Delphi sicher so viel langsamer, als dass das irgendweine Rolle spielen könnte.

hoika 9. Aug 2017 16:13

AW: performance c++ <> Delphi
 
Hallo,
Zitat:

Mir möchte jemand erzählen das wenn er seine Scrollbar sehr schnell zum Ende bewegt wenn ein Movie spielt seine Anwendung dabei abstürzt.
Dann baue ihm eine Dummy-DLL, deren Aufrufe nichts machen zum Test.
Oder er soll sich eine c++-DLL bauen.

Und außerdem:
Wenn seine Anwendung abstürzt, was kannst du denn dafür ;)

Zacherl 9. Aug 2017 16:31

AW: performance c++ <> Delphi
 
Von der Performance ist C++ sicherlich besser als Delphi, aber das ist definitiv nicht die Ursache des Problems.

Verwendest du in deiner Dll oder er in seinem Programm mehrere Threads?

Uwe Raabe 9. Aug 2017 16:39

AW: performance c++ <> Delphi
 
Zitat:

Zitat von Zacherl (Beitrag 1378424)
Von der Performance ist C++ sicherlich besser als Delphi, aber das ist definitiv nicht die Ursache des Problems.

Genau! Ein fehlerhaftes Programm kann man bekanntlich in jeder Programmiersprache schreiben - in manchen ist das etwas schwieriger als in anderen. Allerdings glänzt C++ gerade in diesem Punkt nicht so besonders.

Blup 9. Aug 2017 16:40

AW: performance c++ <> Delphi
 
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.

nahpets 9. Aug 2017 16:44

AW: performance c++ <> Delphi
 
Zitat:

Zitat von Zacherl (Beitrag 1378424)
Von der Performance ist C++ sicherlich besser als Delphi, aber das ist definitiv nicht die Ursache des Problems.

Aber dann stimmt dashier nicht: Integer Performance Comparison for C++, C#, Delphi
Da kommt genau das gegenteilige Ergebnis raus.

EWeiss 9. Aug 2017 16:55

AW: performance c++ <> Delphi
 
Zitat:

Bischen wirr geschrieben der Beitrag (so wie meine meist.)
Kein Ahnung was du wirr meinst noch deutlicher kann man das nicht formulieren.

Zitat:

Zitat von Blup (Beitrag 1378426)
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

Zacherl 9. Aug 2017 19:53

AW: performance c++ <> Delphi
 
Zitat:

Zitat von EWeiss (Beitrag 1378429)
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.

Selten so blöde Aussagen gehört, die jedlicher Logik entsagen :-D

Zitat:

Zitat von EWeiss (Beitrag 1378429)
Zitat:

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

Dann wette ich schon fast drauf, dass hier irgendwo die Ursache zu finden ist.

Zitat:

Zitat von EWeiss (Beitrag 1378429)
er meint er braucht __stdcall nicht weil die Referenz selbst bei ihm nie aufgerufen wird

Da hat er vermutlich sogar recht, wobei das
Delphi-Quellcode:
stdcall
im Typedef sich auch keinesfalls negativ auswirken würde. Erfüllt halt vor allem die Funktion des selbstdokumentierenden Codes.

EWeiss 9. Aug 2017 20:12

AW: performance c++ <> Delphi
 
Zitat:

Da hat er vermutlich sogar recht, wobei das stdcall im Typedef sich auch keinesfalls negativ auswirken würde. Erfüllt halt vor allem die Funktion des selbstdokumentierenden Codes.
Nun ich bin davon ausgegangen das ein stdcall von Nöten ist um die Funktionsweise des Event zu gewähren.
Zumindest habe ich das bei unserer letzten Diskussion so verstanden.

Nun wie schon erwähnt bin kein besonders guter Kenner von C++ aber versuche mein bestes mit eurer Unterstützung..

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Seite 1 von 3  1 23      

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