자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 모바일에서 datasnap을 이용해 데이터를 가져올때
2019.12.16 23:16
MyThread := TThread.CreateAnonymousThread(
procedure
begin
with dmBox.cdsQuestionFirst do begin
dmBox.scDelQ.Connected := True;
Close;
Open;
dmBox.scDelQ.Connected := False;
TThread.Synchronize (nil,
procedure
begin
GetFirstData;
end);
end;
end);
MyThread.Start;
end;
이렇게 가져 옵니다. 쓰레드 사용하면 화면은 계속 움직이면서 끈어지지않고 그렇거든요.
근데 문제는 저상타에서 아직 다 동작이 끝나지 않은 상태에서 딴 화면으로 들어가서 조회할려고 할때.
MyThread.terminate; 를 사용하고 딴화면을 부릅니다.
그런데 저 쓰레드가 종요 되지 않고 넘어 가는 바람에 access vio.... 억세스 바이올레이션이 납니다.
그말은 쓰레드가 종료가 안됐다는 말인데. 강제 종료 할수 있는 방법이 없나요?
아.. 정말 끈어지는거 처리했는데 저게 문제내요.. ㅠㅠ..
혹시 아시는분 있으면 답변 바랍니다. 그럼 수고하세요.
댓글 2
Delphi 모바일에서 datasnap을 이용해 데이터를 가져올때
2019.12.16 23:16
MyThread := TThread.CreateAnonymousThread(
procedure
begin
with dmBox.cdsQuestionFirst do begin
dmBox.scDelQ.Connected := True;
Close;
Open;
dmBox.scDelQ.Connected := False;
TThread.Synchronize (nil,
procedure
begin
GetFirstData;
end);
end;
end);
MyThread.Start;
end;
이렇게 가져 옵니다. 쓰레드 사용하면 화면은 계속 움직이면서 끈어지지않고 그렇거든요.
근데 문제는 저상타에서 아직 다 동작이 끝나지 않은 상태에서 딴 화면으로 들어가서 조회할려고 할때.
MyThread.terminate; 를 사용하고 딴화면을 부릅니다.
그런데 저 쓰레드가 종요 되지 않고 넘어 가는 바람에 access vio.... 억세스 바이올레이션이 납니다.
그말은 쓰레드가 종료가 안됐다는 말인데. 강제 종료 할수 있는 방법이 없나요?
아.. 정말 끈어지는거 처리했는데 저게 문제내요.. ㅠㅠ..
혹시 아시는분 있으면 답변 바랍니다. 그럼 수고하세요.
MyThread.Terminate; 호출은 쓰래드를 정지하는 작업이 아닙니다.
Terminate 메소드 호출은 이제 정지하세요라고 상태를 변경해주는 것입니다.
만약 쓰래드 정지를 원한다면, 다음과 같이 정지하세요 하고, 기다려줘야합니다.
MyThread.Terminate;
MyThread.WaitFor;
그 이후 폼을 종료하도록 처리해 보시기 바랍니다.
——————
답글이 도움이 되셨는지 다른 분들도 참고할 수 있도록 결과 댓글 부탁드립니다.
(결과 댓글이 없는 경우 다른 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)