2016-07-07 4 views
0

에서 제네릭 형식의 스레드 로컬 변수를 정의하는 방법은 다음과 같은 일반적인 유형의 스레드 로컬 변수를 정의하고 싶습니다 때문에 일반 매개 변수의 문제가 발생하고있다 :델파이

threadvar 
    mySession: ISession<T>; // not working 

델파이 제네릭 형식의 스레드 로컬 변수를 정의하기위한 권장되는 방법은 무엇입니까?

+0

실제로 달성하려는 것은 무엇입니까? 왜 threadvar로 할 수 없는지 설명해 주시겠습니까? mySession : ISession ; 여러분의 필요에 맞지 않는 이유를 생각하면 문제를 해결하는 방법을 찾는데 도움이 될 것입니다. –

+0

@David : 도와 줘서 고마워, 정말 고마워. 의 대답은 이미 스테판 Glienke 내 문제를 해결했습니다. – MUG4N

+0

그래서'Session'의 모든 인스턴스화마다 별개의 스레드 변수를 갖고 싶습니까? 당신이 이것을 완전히 이해하고 있는지 궁금합니다. 이제 코드가 컴파일되었다고해서 그것이 필요한 것을 수행한다는 것을 의미하지는 않습니다. –

답변

1

개방형 제네릭 형식의 변수를 제네릭 형식 (또는 메서드) 외부에서 선언 할 수 없으며 threadvar과 아무 관계가 없습니다.

하나는 제네릭 형식 안에 threadvar을 넣어 그것은 당신의 ISession<T> 당신이에서 ISession<T> 상속이 아닌 일반적인 기본 유형을 사용하거나 사용에 대해 사용 T의 유형을 알고있다 (물론 그것은 class threadvar 수있다).

또한 threadvars가 암시 적으로 마무리되지 않았기 때문에 여기서 메모리 누수가 발생할 수 있음을 알아야합니다 (here 참조).

+0

threadvar를 제네릭 형식 안에 넣으려고했지만 코드가 컴파일되지 않습니다 : E2029 'END' 예상했지만 'THREADVAR'이 발견되었습니다. threadvar를 제네릭 형식 안에 중첩시키는 방법은 무엇입니까? – MUG4N

+0

유형 내에 threadvar를 중첩 할 수 없습니다. threadvar에는 범용 스코프가 있지만, thread마다 인스턴스화됩니다. 이 대답의 두 번째 단락의 첫 부분은 올바르지 않습니다. –

+0

네, 할 수 있습니다, 그것은'class threadvar' 여야합니다. –