Q&A

  • 동적생성 컨트롤의 포인터 문제입니다.
안녕하세요 쭉쭉빵빵 입니다.



다름이 아니라 동적생성된 컨트롤에 이벤트함수 문제이에요.



자 다음과 같이 하면 해볼께요.



TForm1.myClickHandler( Sender : Tobject );

begin

....

end;



그리고는 생성하신 다음에, 위에 작성한 함수를 Assign 시킵니다.



myObj[i] := TmyObject.Create( self );

myObj[i].OnReceiveMsg := myClickHandler;



위와 같이하면 일단은 됩니다.



그런데 문제는



myObj[i].OnReceiveMsg 의 포인터 함수가 하나라는데 있어요



즉 myObj[0]의 이벤트가 발생되면 myClickHandler가 실행되겠지만



실행도중에 myObj[1]의 이벤트가 발생될 경우 프로시져 락킹으로 인한 딜레이



또는 메모리 침범이 일어날 소지가 있을것 같아요.



제 생각이 맞다면 myClickHandler도 동적생성해서 연결하여야 할것 같은데



이와같은 방법을 잘 모르겠네요



고수님의 한 수 가르침을 받고 싶어요..



그럼 이만...

2  COMMENTS
  • Profile
    최용일 2001.03.27 12:44
    안녕하세요. 최용일입니다.



    실행도중에 myObj[1]의 이벤트가 발생될 경우 프로시져 락킹으로 인한 딜레이(?)

    또는 메모리 침범이 일어날 소지(?)는 없으니까 안심하고 쓰세요.



    두개가 동시에 실행된다고 해도 파라매터는 서로다른 힙영역에 생성이 됩니다. 그러니까



    그러한 문제는 전혀 없습니다. 쉽게 설명하자면 재귀호출을 생각하시면 됩니다. 재귀호



    출은 하나의 함수가 실행되는 도중에 그 함수가 또 실행되는건데 위와 같은 문제는 일어



    나지 않습니다. 이벤트를 공유하실때에는 Button1, Form1, ...이런식으로 직접 참조하시



    지 마시고 Sender파라매터를 이용하시는 것이 좋습니다.



    ^^ 항상 즐코하세요...



    쭉쭉빵빵 wrote:

    > 안녕하세요 쭉쭉빵빵 입니다.

    >

    > 다름이 아니라 동적생성된 컨트롤에 이벤트함수 문제이에요.

    >

    > 자 다음과 같이 하면 해볼께요.

    >

    > TForm1.myClickHandler( Sender : Tobject );

    > begin

    > ....

    > end;

    >

    > 그리고는 생성하신 다음에, 위에 작성한 함수를 Assign 시킵니다.

    >

    > myObj[i] := TmyObject.Create( self );

    > myObj[i].OnReceiveMsg := myClickHandler;

    >

    > 위와 같이하면 일단은 됩니다.

    >

    > 그런데 문제는

    >

    > myObj[i].OnReceiveMsg 의 포인터 함수가 하나라는데 있어요

    >

    > 즉 myObj[0]의 이벤트가 발생되면 myClickHandler가 실행되겠지만

    >

    > 실행도중에 myObj[1]의 이벤트가 발생될 경우 프로시져 락킹으로 인한 딜레이

    >

    > 또는 메모리 침범이 일어날 소지가 있을것 같아요.

    >

    > 제 생각이 맞다면 myClickHandler도 동적생성해서 연결하여야 할것 같은데

    >

    > 이와같은 방법을 잘 모르겠네요

    >

    > 고수님의 한 수 가르침을 받고 싶어요..

    >

    > 그럼 이만...

  • Profile
    쭉쭉빵빵 2001.03.27 13:16


    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > 실행도중에 myObj[1]의 이벤트가 발생될 경우 프로시져 락킹으로 인한 딜레이(?)

    > 또는 메모리 침범이 일어날 소지(?)는 없으니까 안심하고 쓰세요.

    >

    > 두개가 동시에 실행된다고 해도 파라매터는 서로다른 힙영역에 생성이 됩니다. 그러니까

    >

    > 그러한 문제는 전혀 없습니다. 쉽게 설명하자면 재귀호출을 생각하시면 됩니다. 재귀호

    >

    > 출은 하나의 함수가 실행되는 도중에 그 함수가 또 실행되는건데 위와 같은 문제는 일어

    >

    > 나지 않습니다. 이벤트를 공유하실때에는 Button1, Form1, ...이런식으로 직접 참조하시

    >

    > 지 마시고 Sender파라매터를 이용하시는 것이 좋습니다.

    >

    > ^^ 항상 즐코하세요...

    >

    > 쭉쭉빵빵 wrote:

    > > 안녕하세요 쭉쭉빵빵 입니다.

    > >

    > > 다름이 아니라 동적생성된 컨트롤에 이벤트함수 문제이에요.

    > >

    > > 자 다음과 같이 하면 해볼께요.

    > >

    > > TForm1.myClickHandler( Sender : Tobject );

    > > begin

    > > ....

    > > end;

    > >

    > > 그리고는 생성하신 다음에, 위에 작성한 함수를 Assign 시킵니다.

    > >

    > > myObj[i] := TmyObject.Create( self );

    > > myObj[i].OnReceiveMsg := myClickHandler;

    > >

    > > 위와 같이하면 일단은 됩니다.

    > >

    > > 그런데 문제는

    > >

    > > myObj[i].OnReceiveMsg 의 포인터 함수가 하나라는데 있어요

    > >

    > > 즉 myObj[0]의 이벤트가 발생되면 myClickHandler가 실행되겠지만

    > >

    > > 실행도중에 myObj[1]의 이벤트가 발생될 경우 프로시져 락킹으로 인한 딜레이

    > >

    > > 또는 메모리 침범이 일어날 소지가 있을것 같아요.

    > >

    > > 제 생각이 맞다면 myClickHandler도 동적생성해서 연결하여야 할것 같은데

    > >

    > > 이와같은 방법을 잘 모르겠네요

    > >

    > > 고수님의 한 수 가르침을 받고 싶어요..

    > >

    > > 그럼 이만...