Q&A

  • 간단한 쓰레드 예제 거든요....좀 도와주세요..
책을 쭉보면 이해가 되거든요..실지로 코딩해 보니깐 에러가 나네요..

어떻게 해야할지 모르겠어요..좀 도와주세요..*^^*..





public

{ Public declarations }

function MyThread(P:pointer):Longint;Stdcall; 선언하구요..

end;



var

Form1: TForm1;



implementation



{$R *.DFM}





쓰레드사용해서 함수호출

procedure TForm1.Button1Click(Sender: TObject);

var

hThread:THandle;

ThreadID:DWORD;

begin

hThread:=CreateThread(nil,

0,

@MyThread, <<**************************여기서 에러가나요..?

nil,

0,

ThreadID);

if hThread = 0 then

Application.MessageBox('쓰레드 생성실패','확인',0);

end;



그냥 함수호출

procedure TForm1.Button2Click(Sender: TObject); begin

Mythread(nil);

end;





이함수는 그냥 1에서 1000까지합을구해서 메모에 출력해주는 간단한..그쵸

function TForm1.MyThread(P:pointer):LongInt;StdCall

var

i,j:integer;

begin

j:= 0;

Memo1.Clear;

ProgressBar1.Position:=0;

for i:=0 to 1000 do

begin

inc(j);

form1.Memo1.Lines.Add(intTostr(j));

ProgressBar1.Position:=j;

end;

end;



4  COMMENTS
  • Profile
    이경문 2001.10.30 20:03
    MyThread를 Class안에 선언하지 말고 외부에 선언하세요.

    원래 Class의 Method는 맨 처음 Object의 Pointer를 Stack에 Push하고 Call을 하게 되는데

    thread function은 그렇게 하면 안됩니다.





    체리 wrote:

    > 책을 쭉보면 이해가 되거든요..실지로 코딩해 보니깐 에러가 나네요..

    > 어떻게 해야할지 모르겠어요..좀 도와주세요..*^^*..

    >

    >

    > public

    > { Public declarations }

    > function MyThread(P:pointer):Longint;Stdcall; 선언하구요..

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    >

    > 쓰레드사용해서 함수호출

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > hThread:THandle;

    > ThreadID:DWORD;

    > begin

    > hThread:=CreateThread(nil,

    > 0,

    > @MyThread, <<**************************여기서 에러가나요..?

    > nil,

    > 0,

    > ThreadID);

    > if hThread = 0 then

    > Application.MessageBox('쓰레드 생성실패','확인',0);

    > end;

    >

    > 그냥 함수호출

    > procedure TForm1.Button2Click(Sender: TObject); begin

    > Mythread(nil);

    > end;

    >

    >

    > 이함수는 그냥 1에서 1000까지합을구해서 메모에 출력해주는 간단한..그쵸

    > function TForm1.MyThread(P:pointer):LongInt;StdCall

    > var

    > i,j:integer;

    > begin

    > j:= 0;

    > Memo1.Clear;

    > ProgressBar1.Position:=0;

    > for i:=0 to 1000 do

    > begin

    > inc(j);

    > form1.Memo1.Lines.Add(intTostr(j));

    > ProgressBar1.Position:=j;

    > end;

    > end;

    >

  • Profile
    체리 2001.10.30 21:42
    정말루 감사하구요..

    그럼 어디다 선언해줘야 할지 모르겠어요..

    쪼금만 갈쳐주세여...감사합니다...^^

    unit untthread;



    interface



    uses

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

    ComCtrls, StdCtrls;



    type

    TForm1 = class(TForm)

    Memo1: TMemo;

    Button1: TButton;

    Button2: TButton;

    ProgressBar1: TProgressBar;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }



    public

    { Public declarations }



    end;



    var

    Form1: TForm1;







    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    hThread:THandle;

    ThreadID:DWORD;

    begin

    hThread:=CreateThread(nil,

    0,

    @MyThread,

    nil,

    0,

    ThreadID);

    if hThread = 0 then

    Application.MessageBox('쓰레드 생성실패','확인',0);

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    Mythread(nil);

    end;



    function TForm1.MyThread(P:pointer):LongInt;StdCall

    var

    i,j:integer;

    begin

    j:= 0;

    Memo1.Clear;

    ProgressBar1.Position:=0;

    for i:=0 to 1000 do

    begin

    inc(j);

    form1.Memo1.Lines.Add(intTostr(j));

    ProgressBar1.Position:=j;

    end;

    end;



    end.



  • Profile
    이경문 2001.10.30 22:07
    MyThread라는 function을 TForm Class의 객체로 선언하지 말고

    다음과 같이 일반 procedure로 선언한 다음 사용하면 됩니다.

    그런데 예제를 보니 ProgressBar를 진행시키는 것을

    Thread로 처리하시려고 하는 것 같은데

    VCL관련 콘트롤을 thread에서 처리하는 것은

    좋은 방법이 아닙니다.

    제 생각에는 CreateThread win32 API를 사용하는 것 보다

    TThread라는 것을 우선 숙지하시는 것이 좋을 것 같네요.

    델파이 관련 책이나 예제를 보면

    TThread 사용방법을 쉽게 알 수 있을 겁니다.





    unit untthread;



    interface



    uses

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

    ComCtrls, StdCtrls;



    type

    TForm1 = class(TForm)

    Memo1: TMemo;

    Button1: TButton;

    Button2: TButton;

    ProgressBar1: TProgressBar;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }



    public

    { Public declarations }



    end;



    function MyThread(P:pointer):LongInt;StdCall;



    var

    Form1: TForm1;







    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    hThread:THandle;

    ThreadID:DWORD;

    begin

    hThread:=CreateThread(nil,

    0,

    @MyThread,

    nil,

    0,

    ThreadID);

    if hThread = 0 then

    Application.MessageBox('쓰레드 생성실패','확인',0);

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    Mythread(nil);

    end;



    function MyThread(P:pointer):LongInt;StdCall;

    var

    i,j:integer;

    begin

    j:= 0;

    Form1.Memo1.Clear;

    Form1.ProgressBar1.Position:=0;

    for i:=0 to 1000 do

    begin

    inc(j);

    form1.Memo1.Lines.Add(intTostr(j));

    Form1.ProgressBar1.Position:=j;

    end;

    end;



    end.



  • Profile
    체리 2001.10.31 04:16
    그렇게 하니깐 되네여..정말루 감사 드려요..

    첨이라서 아직 잘 몰라요..*^^*....

    더 열심히 공부할수 있게 해 주셔서 고맙습니다..

    • 초초보
    • 2001.10.30 23:35
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2001.10.31 06:17
      초초보 wrote: > 수고많으십니다...다름이아니오라 > > StringGrid 에서 레코드선택후 수정버튼을 누르...
    • 이성찬
      2001.10.31 03:31
      어떻게 구현하셨는지 봐야지 답변이 가능할것 같네요. 질문만 보면 처리방법을 몰라서 올리신거 같진 않아...
    • il
    • 2001.10.30 23:31
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.10.31 00:42
      안녕하세요. 최용일입니다. 설명 잘읽어보시면 될텐데.... 목차중에 Running을 보시면 델파이 폴더의...
    • 감사맨
      2001.10.31 22:59
      최용일 wrote: > 안녕하세요. 최용일입니다. > > 설명 잘읽어보시면 될텐데.... > > 목차중에 Runni...
    • 이성훈
      2001.10.30 20:37
      이성훈입니다. 여러가지 방법이 있는데.... 젤 간단한 방법은 Rectangle함수를 이용하는 겁니다.. ...
    • 이성찬
      2001.10.31 03:08
      1. 간단한 사용법 StoredProc1.DatabaseName := 데이타베이스명; 연결된 상태라면 StroedProcName ...
    • 꾸룽껭
    • 2001.10.30 20:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김훈
      2001.10.31 00:28
      꾸룽껭 wrote: > 인터베이스 6의 IBExpress를 다운받아는데 > 어케 인스톨 하죠? > 제발 알켜주세영 > ...
    • 왕초보
    • 2001.10.30 20:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 지나가는사람
      2001.10.30 21:58
      리소스를 확인해보세요.. 왕초보 wrote: > 한폼에 이미지를 80개정도를 띄웁니다. > 그런데 에러메...
    • 김지엽
      2001.10.30 21:55
      특별한 에러메시지가 없다면, 죽었다기 보다는 '얼어있는' 상태인 듯 하군요. 이미지 80개가 어느 정도의 ...
    • 깨구락지
      2001.10.30 21:03
      Child Form의 OnCloseQuery 이벤트내에서.. procedure TForm3.FormCloseQuery(Sender: TObject; var Can...
    • 어린왕자A
      2001.10.30 23:39
      네..답변 감사합니다. 저가 원하는 답변은 아니구요(__);; MDI의 메인폼에서.. WM_CLOSE를 갈고리즘 ...
    • 무심코
      2001.10.30 20:13
      신호 wrote: > 안녕하세요. 고수님들.... > 답변이 없어도 계속 질문드립니다. > 제가 궁금한것은 다름...
    • 사발우성
      2001.10.30 19:47
      ^^ 여기 게시판찾아 보심 상태바에 프로그래스바를 동적으로 생성해서 넣어 주는 팁있슴돠~ 찾아 보시길......
    • 사발우성™
      2001.10.31 00:44
      동적으로 힌트를 만드셔서 거기다 원하는걸 입력하시면 됨다.. 아래의 예제는 동적으로 힌트를 만든담에 s...
    • 무심코
      2001.10.30 20:10
      오고야 wrote: > > 음... > > 티차트에서 각 막대 그래프마다, 힌트를 주고, 이를 마우스가 해당 막...
    • 처음
    • 2001.10.30 19:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.10.31 01:54
      음... WinProcs는 WinTypes와 같이 델파이 1이나 2(?)에서 3(?) 정도까지 사용되어졌던 유닛인데... ...
    • ring
    • 2001.10.30 19:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 하눌이
      2001.10.31 02:44
      server name이 @orcl로 되어있는것 같은데 혹, orcl.world로 하심 되실수도 이꺼덩요.. 도움이 되시길...
    • 박이배
    • 2001.10.30 19:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.10.31 01:48
      안녕하세요. 최용일입니다. Windows유닛을 살펴보세요. 거기에 있는 함수들 대부분이 dll에서 임포트한 ...
    • 박대석
    • 2001.10.30 17:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2001.10.31 01:44
      안녕하세요. 최용일입니다. TBitmap파일이 아니라 확장자가 .bmp인 파일을 말씀하시는 거겠죠?? 그냥...
    • 체리
    • 2001.10.30 12:55
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이경문
      2001.10.30 20:03
      MyThread를 Class안에 선언하지 말고 외부에 선언하세요. 원래 Class의 Method는 맨 처음 Object의 Pointe...
    • 체리
      2001.10.30 21:42
      정말루 감사하구요.. 그럼 어디다 선언해줘야 할지 모르겠어요.. 쪼금만 갈쳐주세여...감사합니다...^^ ...
    • 이경문
      2001.10.30 22:07
      MyThread라는 function을 TForm Class의 객체로 선언하지 말고 다음과 같이 일반 procedure로 선언한 다음...
    • 체리
      2001.10.31 04:16
      그렇게 하니깐 되네여..정말루 감사 드려요.. 첨이라서 아직 잘 몰라요..*^^*.... 더 열심히 공부할수 있...