dynamic_cast - sehr langsam?



  • Hallo zusammen,
    ich möchte für ein Kartenspiel das Umdrehen einer Karte so anzeigen:

    int Width = dynamic_cast<TBeerslut*>(Sender)->Width;
    while ((Width * -1) <dynamic_cast<TBeerslut*>(Sender)->Width)
    {
    
    dynamic_cast<TBeerslut*>(Sender)->Width -= 6;
    dynamic_cast<TBeerslut*>(Sender)->Left  += 3;
    //if (dynamic_cast<TBeerslut*>(Sender)->Width <= 0)
    //dynamic_cast<TBeerslut*>(Sender)->Picture->LoadFromFile(dynamic_cast<TBeerslut*>(Sender)->Type.Picture);
    Application->ProcessMessages();
    Sleep(10);
    }
    

    Dieser Code wird im OnClick Event ausgeführt.

    Es läuft auch ganz schön soweit, jedoch läuft der Vorgang so langsam ab, dass mand ie einzelnen Bewegungen msehen kann..

    Ich habe irgendwo gelesen, dass dynamic cast recht langsam sei, und man irgendwie einen Pointer auf das Objekt machen soll oder sowas... wie geht dsa, ist das richtig und was gibt es für ALternativen?

    Dankesehr,

    ichichich



  • Hallo

    ich glaub du meinst soetwas

    TBeerslut* CurrItem = dynamic_cast<TBeerslut*>(Sender); // Zwischenspeicher für Cast-Ergebnis
    if (CurrItem == NULL) return; // Wenn Cast nicht erfolgreich, abbrechen
    int Width = CurrItem->Width;
    ...
    

    Grundsätzlich ist dynamic_cast schon eine Laufzeit-Angelegenheit. Aber auf keinem Fall so umfangreich, das dein Programm bei solchen Code in die Knie geht. Das ist sicher ein anderes Strukturproblem.

    Wenn du dir übrigens absolut sicher bist, das Sender vom Typ TBeerslut ist, kannst du auch den Entwurfszeit-Cast static_cast nehmen, welcher zur Laufzeit keine Auswertung erfordert.

    TBeerslut* CurrItem = static_cast<TBeerslut*>(Sender); // Zwischenspeicher für Cast-Ergebnis
    

    bis bald
    akari



  • Dankesehr, es funzt.

    Leider stimmt was du gesagt hast - daran liegt es nicht.

    Ich habe jetzt DoubleBuffered ausgestellt, jetzt funzt das.

    ichichich


Log in to reply