|
DataModule 안에 TDatabase 와 TQuery를 생성하고
스레드안에서 쿼리를 할려고 합니다.
쿼리작업시간이 길때, 메인폼에서 다른 작업이 가능하고 또 쿼리 취소가 가능하게 하려는 목적입니다.
void __fastcall TThreadQuery::Execute()
{
Synchronize(Update);
}
..
..
void __fastcall TThreadQuery::Update()
{
DataModule->Query1->Open();
}
(DB부분 이외의 메인 폼VCL접근 부분은 모두 Synchronize를 사용하였습니다.)
위의 작업을 수행하니 쿼리 하는 동안 스레드를 쓴 효과가 전혀 없이 메인폼의 사용이 불가능 하더군요.
(장구에 SQL이라고 써있는 마우스 포인터 모양-_-;)
그래서 Synchronize를 사용하지 않고 그냥 프로그램을 돌리고 있는데 사용에 별 문제가 없네요-,.-;
이대로 그냥 사용 해도 될까요?
얼핏 BDE쪽 콤포넌트들은 스레드안전하다는 얘기도 들은거 같기도 한데..
추가..
정확히는 Query자체가 오래 걸린다기 보단 Query후 DataModule->Query1->Fields를 처리하는 과정이 오래 걸려서 스레드를 사용하려 합니다. 처리하여 ListView에 뿌려주는 부분은 역시 Synchronize를 사용했습니다. 단지 Query1->Open();작업이 Synchronize를 사용 안해도 되는지가 궁금하네요.
|