Q&A

  • 쓰레드가 내맘대로 안 돌아가요..^^;
안녕하십니까..글을 읽어주셔서 감사드립니다..



구현하고자 하는 기능은 하나의 Tab1에서 실시간 정보를 보여줍니다..그러다가 그 중의 한놈을 선택을 하게 되면 또다른 Tab2으로 넘어가서 그 놈에 대한 실시간 정보를 보여줍니다..이때 실제로는 두개의 Tab창에서 각각 실시간 정보가 돌아가게 되겠죠..

그래서 쓰레드를 만들어야겠다고 결심을 하기에 이릅니다..근데 그게 잘 안되더라구요..쓰레드는 써본적이 없어서요..^^;;



그래서 테스트를 하고자 결심했습니다..Tab1에서 프로그래스바를 그려주다가 버튼을 클릭하면 다른 Tab창으로 넘어가서 거기서도 프로그래스바를 그리는 아주아주 허접한 쓰레드프로그램을 짜기에이릅니다..그런데....

이 Tab창이라는게 아주 문제더군요..두개가 작동하고 있을때 Tab선택이 안된다는겁니다..그래서 다시 테스트를 하고자 또 결심했습니다..그것이 아래의 코딩입니다..

Tab1에서 프로그래스바를 그려주다가(Button1 Click시) Tab2로 이동해서 여기서 버튼을 눌러주면(Button2 Click) 프로그래스바를 그려주게 되지요..그런데 역시나..

여기서도 Tab간의 이동이 안되더군요..이러면 의미가 없는데..



고수님들 부탁드립니다..어떻게 하면 좋을까요..시간도 없는데...

그리고 맨처음의 논제인 상세정보를 보고싶은놈을 클릭했을때 탭이 넘어가도록 하는부분은 어디에서 해줘야 아무 문제없이 두 탭을 자유자재로 왔다갔다하면서 정보들을 볼수있을까요..



부탁드립니다..좀 살려주세요...^^









unit Prior;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ComCtrls, ExtCtrls;



type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

Memo1: TMemo;

ProgressBar1: TProgressBar;

Button1: TButton;

TabSheet2: TTabSheet;

Memo2: TMemo;

ProgressBar2: TProgressBar;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);



private

{ Private declarations }

public

{ Public declarations }

end;



TMyThread1 = class(TThread)

protected

procedure Execute; override;

end;



TMyThread2 = class(TThread)

protected

procedure Execute; override;

end;



var

Form1: TForm1;



implementation



{$R *.DFM}





// 쓰레드 실행 프로시져

procedure TMyThread1.Execute;

var

I : Integer;

J : Integer;

begin

J := 0;

// 메모 컴포넌트를 지운다.

Form1.Memo1.Clear;

// 프로그레스바의 위치를 초기화한다.

Form1.ProgressBar1.Position := 0;

for I := 1 to 3000 do

begin

J := J + 1;

// 메모에 추가된 값을 출력한다.

Form1.Memo1.Lines.Add(IntToStr(J));

// 메모의 값을 프로그레스바에 반영한다.

Form1.ProgressBar1.Position := J;

end;

end;



procedure TMyThread2.Execute;

var

I : Integer;

J : Integer;

begin

J := 0;

// 메모 컴포넌트를 지운다.

Form1.Memo2.Clear;

// 프로그레스바의 위치를 초기화한다.

Form1.ProgressBar2.Position := 0;

for I := 1 to 3000 do

begin

J := J + 1;

// 메모에 추가된 값을 출력한다.

Form1.Memo2.Lines.Add(IntToStr(J));

// 메모의 값을 프로그레스바에 반영한다.

Form1.ProgressBar2.Position := J;

end;

end;



procedure TForm1.Button1Click(Sender: TObject);

var

MyThread1 : TMyThread1;



begin

// 쓰레드를 시작한다.

MyThread1 := TMyThread1.Create(False);

MyThread1.Priority := tpHigher;

end;



procedure TForm1.Button2Click(Sender: TObject);

var



MyThread2 : TMyThread2;

begin



// 쓰레드를 시작한다.

MyThread2 :=TMyThread2.Create(False);

MyThread2.Priority := tpHigher;



end;



end.



6  COMMENTS
  • Profile
    동급최강바보 2001.12.21 00:33
    1. 쓰레드의 동기화에 대해서 공부해 보시구요.



    2. 굳이 선택되지 않은 폼에다가 그릴 필요가 있을까요?

    쓰레드는 돌아가지만 그 폼이 Active 폼인지 아닌지를 체크해서 Active 폼일때만 그려주는게 더 좋을듯 싶네여.



    동기화에 대해서 자세하게 공부해보십시오.





  • Profile
    바보감자 2001.12.21 00:30
    안녕하세요 언제나 초보 바보감자입니다

    쓰래드 포문 안에 다가

    함 이거 넣어보세요

    Application.ProcessMessages;

    홧팅 !!







    언제나 비를 기다리는 바보감자가 올림..

  • Profile
    델초보 2001.12.21 00:42
    우선 친절한 답변에 감사드립니다..



    말씀하신 대로 Application.ProcessMessages;

    를 넣으니까 탭간의 이동은 가능해지는군요..

    그런데 그렇게 하니까 이 두놈들이 각각의 할일을 완벽히 수행하진 않는군요..

    어케 된일인지..

    무슨 얘기냐하면 3000까지 출력을 안해줍니다...

    이 두놈들이 좀더 일을 잘하게,완벽하게 할려면 어떻게 해주면 되는지요..



    귀찮으시겠지만 다시한번 답변 부탁드립니다..^^;

  • Profile
    버섯 2001.12.21 03:24
    델초보 wrote:

    > 우선 친절한 답변에 감사드립니다..

    >

    > 말씀하신 대로 Application.ProcessMessages;

    > 를 넣으니까 탭간의 이동은 가능해지는군요..

    > 그런데 그렇게 하니까 이 두놈들이 각각의 할일을 완벽히 수행하진 않는군요..

    > 어케 된일인지..

    > 무슨 얘기냐하면 3000까지 출력을 안해줍니다...

    > 이 두놈들이 좀더 일을 잘하게,완벽하게 할려면 어떻게 해주면 되는지요..

    >

    > 귀찮으시겠지만 다시한번 답변 부탁드립니다..^^;



    제가해보니까.. 수행하다가 멈춘것 처럼 보이긴 한는데.. 실제로

    완벽하게 수행했습니다..



    메모를 검사해보세여.. ^^;

  • Profile
    바보감자 2001.12.21 02:51
    델초보 wrote:

    > 우선 친절한 답변에 감사드립니다..

    >

    > 말씀하신 대로 Application.ProcessMessages;

    > 를 넣으니까 탭간의 이동은 가능해지는군요..

    > 그런데 그렇게 하니까 이 두놈들이 각각의 할일을 완벽히 수행하진 않는군요..

    > 어케 된일인지..

    > 무슨 얘기냐하면 3000까지 출력을 안해줍니다...

    > 이 두놈들이 좀더 일을 잘하게,완벽하게 할려면 어떻게 해주면 되는지요..

    >

    > 귀찮으시겠지만 다시한번 답변 부탁드립니다..^^;



    안녕하세요 언제나 초보 바보감자입니다...

    오동작이라 ^^:;;

    쓰레드를 전 책에 있는대로만 돌리면..오동작을 안하는뎅...

    님이 돌리시는거랑은 약간 방법차이가 있어서 그런가..???..긁적 긁적...

    쏘스엔 잘못된것이 없는것같구요.몇번까지 고정적으로 도나요..??

    아님 돌때마다다른건가요.???

    에러가 안나오 수행이 안되는경우는...자세히 알려주실필요가 있슴당.

    ^^;;; 에구.. 좋은 답변은 안되었네요ㅠㅠ..





    언제나 비를 기다리는 바보감자가올림..

  • Profile
    델초보 2001.12.21 04:34
    돌릴때마다 오동작을 하네요..엄밀히 말하면 오동작이라기보다는 일이 끊기네요..

    메모도 그렇고 프로그래스바도 다 돌지 않습니다..

    물론 돌리고 가만 놔두면 전혀 문제가 없으나, 도중에 탭을 이동해보면 이런 문제가 생기네요..

    좋은 답변 있으심 좀 부탁드리겠습니다..



    >

    > 안녕하세요 언제나 초보 바보감자입니다...

    > 오동작이라 ^^:;;

    > 쓰레드를 전 책에 있는대로만 돌리면..오동작을 안하는뎅...

    > 님이 돌리시는거랑은 약간 방법차이가 있어서 그런가..???..긁적 긁적...

    > 쏘스엔 잘못된것이 없는것같구요.몇번까지 고정적으로 도나요..??

    > 아님 돌때마다다른건가요.???

    > 에러가 안나오 수행이 안되는경우는...자세히 알려주실필요가 있슴당.

    > ^^;;; 에구.. 좋은 답변은 안되었네요ㅠㅠ..

    >

    >

    > 언제나 비를 기다리는 바보감자가올림..