안녕하세요.
제가 쓰레드와 타이머를 사용해서 db에 ado로 연결하는 동안 연결 시간을 타이머를
이용하여 표시를 해주는 건데요.
문제는 연결하는 동안 먹통이 되다가 연결 되면 그때서에 타이머가 동작을 하더라구요
그래서 검색해서 알려주신 몇가지를 사용을 해봤는데.. 그것으로도 해결이 안되더라구요
첫번째로 제가 쓰래드 안에 application.ProcessMessages; 을 사용하였는데도 먹통이였구요
그리고 excute 안에 Synchronize를 사용하여 따로 함수를 불러서 했는데도 마찬가지로
먹통 되다가 연결되면 그때서야 타이머가 작동하더라구요. 이거 어떻게 해야할지
모르겠군요. 제가 소스 올려 드릴테니 꼭 해결해주세요 부탁입니다. ^^
TAdoconn = class(TThread) //쓰레드 생성
private
FADoConn : TADOConnection;
procedure ConnectString;
protected
procedure Execute; override;
public
constructor Create(Adoconn : TADOConnection); virtual;
end;
var
newThread : TAdoconn;
implementation
uses uMain , uAdo;
{$R *.dfm}
//쓰레드 생성 하여 작업을 할수 있도록 동시 작업을 하도록 한다.
procedure TAdoconn.Execute;
begin
application.ProcessMessages;
Synchronize(ConnectString);
end;
procedure TAdoconn.ConnectString;
begin
try
fAdoconn.ConnectionString := '연결부분 여기는 생략'
fadoconn.Connected := true;
except
fadoconn.Close;
end;
end;
constructor TAdoconn.Create(ADOconn : TADOConnection);
begin
inherited create(true);
FADoConn := AdoConn;
FreeOnTerminate := true;
Resume;
end;
//쓰레드 생성 과정 끝
이렇게 했는데요 타이머를 작동을 시키면서 쓰레드를 생성했는데.
먹통이 되더라구요.. 꼭 부탁드립니다.
Ctime.Enabled := true;
newThread := Tadoconn.Create(ado.AdoC);
newThread.FreeOnTerminate := true;
newthread.Resume;
> 안녕하세요.
>
> 제가 쓰레드와 타이머를 사용해서 db에 ado로 연결하는 동안 연결 시간을 타이머를
> 이용하여 표시를 해주는 건데요.
>
> 문제는 연결하는 동안 먹통이 되다가 연결 되면 그때서에 타이머가 동작을 하더라구요
>
> 그래서 검색해서 알려주신 몇가지를 사용을 해봤는데.. 그것으로도 해결이 안되더라구요
>
> 첫번째로 제가 쓰래드 안에 application.ProcessMessages; 을 사용하였는데도 먹통이였구요
>
> 그리고 excute 안에 Synchronize를 사용하여 따로 함수를 불러서 했는데도 마찬가지로
>
> 먹통 되다가 연결되면 그때서야 타이머가 작동하더라구요. 이거 어떻게 해야할지
>
> 모르겠군요. 제가 소스 올려 드릴테니 꼭 해결해주세요 부탁입니다. ^^
>
>
>
> TAdoconn = class(TThread) //쓰레드 생성
> private
> FADoConn : TADOConnection;
> procedure ConnectString;
> protected
> procedure Execute; override;
> public
> constructor Create(Adoconn : TADOConnection); virtual;
> end;
>
> var
> newThread : TAdoconn;
>
> implementation
>
> uses uMain , uAdo;
> {$R *.dfm}
>
> //쓰레드 생성 하여 작업을 할수 있도록 동시 작업을 하도록 한다.
>
> procedure TAdoconn.Execute;
> begin
> application.ProcessMessages;
> Synchronize(ConnectString);
> end;
>
> procedure TAdoconn.ConnectString;
> begin
> try
>
> fAdoconn.ConnectionString := '연결부분 여기는 생략'
> fadoconn.Connected := true;
> except
> fadoconn.Close;
> end;
> end;
>
>
> constructor TAdoconn.Create(ADOconn : TADOConnection);
> begin
> inherited create(true);
> FADoConn := AdoConn;
> FreeOnTerminate := true;
> Resume;
> end;
>
> //쓰레드 생성 과정 끝
>
>
> 이렇게 했는데요 타이머를 작동을 시키면서 쓰레드를 생성했는데.
> 먹통이 되더라구요.. 꼭 부탁드립니다.
>
> Ctime.Enabled := true;
> newThread := Tadoconn.Create(ado.AdoC);
> newThread.FreeOnTerminate := true;
> newthread.Resume;
안녕하세요.
Thread쪽의 Execute쪽에 문제가 있는것 같습니다.
일단 Thread가 계속 살아 있기 위해서는 Application.ProcessMessage를 계속 수행해야 할 텐데 그게 없네요.
그래서, Thread쪽에서 Application.Processmessage를 한 번 호출 한 후에 제거 되었을 겁니다.
while TRUE do
begin
application.ProcessMessages;
Synchronize(ConnectString);
end;
이런 식으로 Execute문을 바꿔 보시길...