Q&A

  • TStoredProc, TThread가 안됩니다....
NT 서버용 프로그램인데요.....

클라이언트에서 UDP로 회원ID와 IP가 날라오면, 리눅스 서버에 있는 PL/SQL을

실행시키는 아주 간단한 프로그램(?)인데요.......



첫번째 문제는

TStoredProc 컴포넌트가 520번 정도밖에 실행되지 않습니다.....

오라클의 버퍼 크기가 문제인가요?

컴포넌트는 WinShoes라는 UDP 컴포넌트를 쓰고 있는데 원래는 리스트 박스에

회원번호, IP를 계속보여주고(ListBox1.Items.Add(id + ip)) 오라클 PL/SQL을

실행하는데 520번 실행된후부터는 리스트박스에도 안나오고 PL/SQL도 안됩니다.

그렇다고 다운된것도 아니고..... Mistery



델도사님의 답변 부탁드립니다~~







두번째 문제는

그래서 Thread를 만들어서 해결 하는데 잘 안됩니다.

아래 코드 보시고 답변좀 부탁드려요. 꾸벅~



---------1번째는 WinAPI를 사용함---------------------------------

Type에

function ThreadProc1(P: Pointer):LongInt; stdcall;

procedure UDP1.read에(var에 ThreadID, ThreadHandle 선언후)

ThreadHandle := CreateThread(nil,0,@ThreadProc1,nil,0,ThreadID);

if(ThreadHandle = 0) then

MessageBox(Handle, 'No Thread', nil, MB_OK);

function TForm1.ThreadProc1(P: Pointer):LongInt; stdcall;

begin

StoredProc1.Params[0].AsInteger := t_id;

StoredProc1.Params[1].AsString := t_ip;

StoredProc1.ExecProc;

end; //t_id, t_ip는 전역 변수



*에러는 ThreadHandle := CreateThread(nil,0,@ThreadProc1,nil,0,ThreadID);

여기서 생깁니다. Veriable Required라는 에러닙니다.



----------2번째는 TThread를 사용함-----------------------------

unit main;



interface





uses

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

Winshoes, UDPWinshoe, StdCtrls, Db, DBTables;



type

TForm1 = class(TForm)

ListBox1: TListBox;

Listener: TWinshoeUDPListener;

DataSourceGpss: TDataSource;

Database1: TDatabase;

StoredProc1: TStoredProc;

procedure ListenerUDPRead(Sender: TObject; const psData,

psPeer: String; const piPort: Integer);

private

public

end;



jThread = class(TThread)

whyStoredProc : TStoredProc;



private

public

constructor Create(StoredProc: TStoredProc); virtual;

protected

procedure Execute; override;

end;



var

Form1: TForm1;

t_id: Integer;

t_ip: String;





implementation

{$R *.DFM}



procedure TForm1.ListenerUDPRead(Sender: TObject; const psData,

psPeer: String; const piPort: Integer);

begin

listbox1.Items.Add(psData + ' ' + psPeer );



t_id := StrToInt(psData);

t_ip := psPeer;

jThread.Create(StoredProc1);



end;



constructor jThread.Create(StoredProc: TStoredProc);

begin

inherited Create(True);



whyStoredProc := StoredProc;



FreeOnTerminate := True;

Resume;



end;



procedure jThread.Execute;

begin

whyStoredProc.Prepare;

whyStoredProc.Params[0].AsInteger := t_id;

whyStoredProc.Params[1].AsString := t_ip;

whyStoredProc.ExecProc;

whyStoredProc.UnPrepare;



end;



end.



여기서도 520번 정도만 실행되고 종료시 EAccessViolation Error가 납니다......

SOS

##############################################################################



그럼 즐통되세요....(담부터는 짧게 올리겠슴니다^^)

0  COMMENTS