2017-12-07 6 views
1

Das Problem ist der zugewiesene Teil, ich versuchte mit Log ('aaa') und auch Log funktioniert anderswo. Warum ist S3 (TStopwatch) nicht kompatibel mit zugewiesen?Assigned (TStopWatch) gibt E2008

**[dcc64 Error] thChunkManager.pas(529): E2008 Incompatible types** 

Wie kann ich überprüfen, ob S3 erstellt wurde oder nicht?

Antwort

2

TStopWatch ist ein record type, kein class type. Eine Instanz eines Datensatzes kann im Stapelspeicher des aufrufenden Threads erstellt werden. Eine Instanz eines Klassentyps muss stattdessen dynamisch im Heap-Speicher zugewiesen werden. Nur Zeiger können an Assigned() übergeben werden. Eine Datensatzinstanz auf dem Stapel zählt nicht.

Für das, was Sie versuchen, sollten Sie stattdessen die TStopWatch.IsRunning Eigenschaft verwenden:

if S3.IsRunning then 
    Log('TChunkManager.UpdateVertices Create VAO ms: ' + S3.ElapsedMilliseconds.ToString); 
+0

Warum nicht die Namenskonvention jeden Hinweis darüber geben? Datensatztypen könnten mit unterschiedlichen Präfixen benannt werden, wie zum Beispiel RStopWatch. Würden einige Probleme mit fehlerhafter Freigabe und dergleichen vermeiden, wenn es automatisch offensichtlich wäre, ohne jeden Typ kennen zu müssen oder zu überprüfen. – Doege

Verwandte Themen