Q&A

  • 쓰레드를 여러개 생성할때..
어떤 시점에서 쓰레드를 생성시키고.. 다른 시점에서 또 쓰레들 생성하고 싶습니다..

물론.. 쓰레드에서 하는 작업은.. 다르구요..



전..



/////////////////

procedure TForm1.Create_Thread;

var

hThread : THandle;

ThreadID: DWORD;

begin

hThread := CreateThread(nil,

0,

@My1Thread,

nil,

0,

ThreadID);

if hThread = 0 then

Application.MessageBox('Thread fail', 'ok', 0);

end;





procedure TForm1.Create_Thread2;

var

hThread : THandle;

ThreadID: DWORD;

begin

hThread := CreateThread(nil,

0,

@My2Thread,

nil,

0,

ThreadID);

if hThread = 0 then

Application.MessageBox('Thread fail', 'ok', 0);

end;



///////////





이렇게.. 함수를 2개 만들어 사용해 봤는데..

Create_Thread1는 실행 되는데.. Create_Thread2에서 My2Thread가 선언이 되지

않았다고..그래요..

Create_Thread1과 같이 선언했는데..



어떻게 해야 하는지.. 답변을 부탁드립니다..



2  COMMENTS
  • Profile
    구창민 2001.10.30 05:49
    안녕하세요~ 구창민입니다.



    쓰레드를 사용하는 간단한 방법을 말씀드릴께요



    먼저 쓰레드 클래쓰를 하나 선언하는 방법입니다.





    TThread형이름 = class(TThread)

    protected

    procedure 함수명;

    public

    procedure Execute; override;

    end;





    이렇게 쓰면 기본적으로 쓰레드를 사용할 수 있는 골격이 갖추어 집니다.



    다음으로 쓰레드를 생성을 합니다.



    // 쓰레드 객체를 실제로 생성하는 코드입니다. 파라미터로 True를 넘기고 있습니다...

    // 파라미터 값을 false로 하면 생성과 동시에 쓰레드가 실행하게 되구요

    // True로 하게 되면 resume 메쏘드를 호출한 후에 비로소 실행하게 됩니다.



    Thread변수 := TThread변수형.Create(true);

    Thread변수.Priority := tpIdle;



    위처럼 쓰면 님이 원하시는 대로 여러개의 쓰레드를 생성해서 사용하실 수 가 있습니다.

    위에 상수대입에는 tpPiorty 또는 tp... 로 시작되는 여러가지 상수가 있습니다. 필요에 따라 선언해서 쓰시면 되죠.

    일반적으로 tpNormal 를 쓰시면 됩니다.



    Thread변수.Resume; //실행합니다.





    // Suspend : 이 메쏘드는 동작중인 쓰레드를 멈추게 해주는 역할을 합니다.

    // Resume : 이 메쏘드는 suspend에 의해서 멈추어진 쓰레드를 다시 가동하게 합니다.



    CreateThread 와 머가 다른지 물어보시는 분들도 계신데



    쓰레드를 생성하면 CreateThread 함수를 내부적으로 호출하므로 신경쓰지 않아도 됩니다.



    해서, 이렇게 하면 쓰레드가 생성이 되며 동시에 실행이 됩니다.



    실행이 되면 쓰레드의 Execute 가 실행되는건 아시죠?







    lthee wrote:

    > 어떤 시점에서 쓰레드를 생성시키고.. 다른 시점에서 또 쓰레들 생성하고 싶습니다..

    > 물론.. 쓰레드에서 하는 작업은.. 다르구요..

    >

    > 전..

    >

    > /////////////////

    > procedure TForm1.Create_Thread;

    > var

    > hThread : THandle;

    > ThreadID: DWORD;

    > begin

    > hThread := CreateThread(nil,

    > 0,

    > @My1Thread,

    > nil,

    > 0,

    > ThreadID);

    > if hThread = 0 then

    > Application.MessageBox('Thread fail', 'ok', 0);

    > end;

    >

    >

    > procedure TForm1.Create_Thread2;

    > var

    > hThread : THandle;

    > ThreadID: DWORD;

    > begin

    > hThread := CreateThread(nil,

    > 0,

    > @My2Thread,

    > nil,

    > 0,

    > ThreadID);

    > if hThread = 0 then

    > Application.MessageBox('Thread fail', 'ok', 0);

    > end;

    >

    > ///////////

    >

    >

    > 이렇게.. 함수를 2개 만들어 사용해 봤는데..

    > Create_Thread1는 실행 되는데.. Create_Thread2에서 My2Thread가 선언이 되지

    > 않았다고..그래요..

    > Create_Thread1과 같이 선언했는데..

    >

    > 어떻게 해야 하는지.. 답변을 부탁드립니다..

    >

  • Profile
    lthee 2001.10.30 19:16
    안녕하세요.. 답변 감사합니다..

    전 생성된 각각의 쓰레드 Execute 함수 안에서 작업을 다르게 하고 싶습니다..

    그렇게 할려면 어떻게 해야 하나요??



    님의 말처럼 하게 되면.. 같은 일을 하는 쓰레드 2개가 생성되는 것이 아닌가요??









    구창민 wrote:

    > 안녕하세요~ 구창민입니다.

    >

    > 쓰레드를 사용하는 간단한 방법을 말씀드릴께요

    >

    > 먼저 쓰레드 클래쓰를 하나 선언하는 방법입니다.

    >

    >

    > TThread형이름 = class(TThread)

    > protected

    > procedure 함수명;

    > public

    > procedure Execute; override;

    > end;

    >

    >

    > 이렇게 쓰면 기본적으로 쓰레드를 사용할 수 있는 골격이 갖추어 집니다.

    >

    > 다음으로 쓰레드를 생성을 합니다.

    >

    > // 쓰레드 객체를 실제로 생성하는 코드입니다. 파라미터로 True를 넘기고 있습니다...

    > // 파라미터 값을 false로 하면 생성과 동시에 쓰레드가 실행하게 되구요

    > // True로 하게 되면 resume 메쏘드를 호출한 후에 비로소 실행하게 됩니다.

    >

    > Thread변수 := TThread변수형.Create(true);

    > Thread변수.Priority := tpIdle;

    >

    > 위처럼 쓰면 님이 원하시는 대로 여러개의 쓰레드를 생성해서 사용하실 수 가 있습니다.

    > 위에 상수대입에는 tpPiorty 또는 tp... 로 시작되는 여러가지 상수가 있습니다. 필요에 따라 선언해서 쓰시면 되죠.

    > 일반적으로 tpNormal 를 쓰시면 됩니다.

    >

    > Thread변수.Resume; //실행합니다.

    >

    >

    > // Suspend : 이 메쏘드는 동작중인 쓰레드를 멈추게 해주는 역할을 합니다.

    > // Resume : 이 메쏘드는 suspend에 의해서 멈추어진 쓰레드를 다시 가동하게 합니다.

    >

    > CreateThread 와 머가 다른지 물어보시는 분들도 계신데

    >

    > 쓰레드를 생성하면 CreateThread 함수를 내부적으로 호출하므로 신경쓰지 않아도 됩니다.

    >

    > 해서, 이렇게 하면 쓰레드가 생성이 되며 동시에 실행이 됩니다.

    >

    > 실행이 되면 쓰레드의 Execute 가 실행되는건 아시죠?

    >

    >

    >

    > lthee wrote:

    > > 어떤 시점에서 쓰레드를 생성시키고.. 다른 시점에서 또 쓰레들 생성하고 싶습니다..

    > > 물론.. 쓰레드에서 하는 작업은.. 다르구요..

    > >

    > > 전..

    > >

    > > /////////////////

    > > procedure TForm1.Create_Thread;

    > > var

    > > hThread : THandle;

    > > ThreadID: DWORD;

    > > begin

    > > hThread := CreateThread(nil,

    > > 0,

    > > @My1Thread,

    > > nil,

    > > 0,

    > > ThreadID);

    > > if hThread = 0 then

    > > Application.MessageBox('Thread fail', 'ok', 0);

    > > end;

    > >

    > >

    > > procedure TForm1.Create_Thread2;

    > > var

    > > hThread : THandle;

    > > ThreadID: DWORD;

    > > begin

    > > hThread := CreateThread(nil,

    > > 0,

    > > @My2Thread,

    > > nil,

    > > 0,

    > > ThreadID);

    > > if hThread = 0 then

    > > Application.MessageBox('Thread fail', 'ok', 0);

    > > end;

    > >

    > > ///////////

    > >

    > >

    > > 이렇게.. 함수를 2개 만들어 사용해 봤는데..

    > > Create_Thread1는 실행 되는데.. Create_Thread2에서 My2Thread가 선언이 되지

    > > 않았다고..그래요..

    > > Create_Thread1과 같이 선언했는데..

    > >

    > > 어떻게 해야 하는지.. 답변을 부탁드립니다..

    > >