Re: Разделение процессов
От: Bander  
Дата: 21.11.04 07:51
Оценка: 9 (2) -1
Здравствуйте, delphinchik, Вы писали:

D>Необходимо сделать так, что при выполнении одних операций программа не "висла" а отвечала на клики пользователя. Очень часто это бывает необходимо, когда программа выполняет какой то запрос к БД и если он достаточно сложный то на время его выполнения она подвисает. Как избавиться от этого?


Есть более интерсный выход из положения.
Существует 2 вида сединения в сервером БД : синхронный и асинхронный.
При синхронном соединении программа всегда ждет завершения выполненя запроса (виснет). При асинхронном программа посылает запрос и сразу продолжает работать дальше. Когда асинхронный запрос выполнен генерируется соответствующее событие.
Примеры для TADOConnection:

Connection->ConnectOptions = coAsyncConnect; // устанавливает асинхронный режим
Connection->OnConnectComplete = ConnectionConnectComplete; // это событие будет выполняться при завершении запроса.


// Пример тела события
void __fastcall TReconnectionBox::ConnectionConnectComplete(TADOConnection*,
const _di_Error Error, TEventStatus &EventStatus)
{
ShowMessage("Запрос выполнен");
}


// Вызов запросса как обычно...
TADOQuery * query = new TADOQuery;
qyery->Connection = Connection;
query->SQL->Add("select * from table");
query->Open();
// После query->Open() прога пойдет дальше не дожидаясь окончания выполнения запроса.

P.S. Примеры даны для c++Builder, но я уверен, что такое есть в Delphi.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.