2017-12-07 14 views
1
if assigned(S3) then Log('TChunkManager.UpdateVertices Create VAO ms: ' + 
    S3.ElapsedMilliseconds.ToString); 

문제는 할당 된 부분입니다. Log ('aaa')로 시도했지만 Log는 다른 곳에서도 정상적으로 작동합니다. S3 (TStopwatch)가 할당 된 것과 호환되지 않는 이유는 무엇입니까?할당 됨 (TStopWatch)이 E2008을 부여합니다

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

S3 생성 여부는 어떻게 확인할 수 있습니까?

답변

2

TStopWatchclass type이 아니라 record type입니다. 레코드의 인스턴스는 호출 스레드의 스택 메모리에 생성 될 수 있습니다. 클래스 유형의 인스턴스는 힙 메모리에 동적으로 할당되어야합니다. 포인터 만 Assigned()으로 전달할 수 있습니다. 스택의 레코드 인스턴스는 계산되지 않습니다.

당신이 시도하고 무엇을 위해, 당신은 아마 대신 TStopWatch.IsRunning 속성을 사용하려면 :

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

왜 이름 지정 규칙이에 대한 힌트를 제공하지 않는 이유는 무엇입니까? 레코드 유형은 예를 들어 RStopWatch와 같이 다른 접두어로 명명 될 수 있습니다. 잘못된 유형의 정보를 알고 있거나 확인하지 않고도 자동으로 분명한 경우 문제를 해결할 수 있습니다. – Doege