Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отмена DataSet.Open в потоке [D7, MSSQL]


Санёк ©   (2004-11-05 12:44:00) 

Создаю поток в котором

procedure TDBThread.Execute;
 DataSet := TADODataSet.Create(nil);
 DataSet.ConnectionString := ConnectionString;
 DataSet.CommandText := CommandText;
 try
   DataSet.Open;
 except
 end;
end;

потом прибиваю его

 TerminateThread(DBThread.Handle, 0);
 DBThread.DataSet.Free;
 DBThread := nil;

всё работает и так как именно хотелось. Но, есть проблема, память не освобождается. При запуске нового потока программа только увеличивается в размере. Как освободить память?


Fay   (2004-11-09 16:58:00) [1]

2 sniknik ©   (09.11.04 15:48) [15]
Вас не затруднит отправить и мне то же самое? Plz.


sniknik   (2004-11-09 15:48:00) [2]

выслал. ты бы почту сразу указывал и в положенном месте, как все нормальные люди. а то еще искать нужно, да копировать а не тычком мыши... мрак в общем. обычно на такое не отвечают.


Санёк   (2004-11-09 11:25:00) [3]

А можно всё же примерчик получить???


KSergey   (2004-11-06 13:39:00) [4]

Не на, повторно не надо ;)
Я имел в виду сразу в форум - ну да ладно. Спасибо.


sniknik   (2004-11-06 12:18:00) [5]

> А мне, мне... ;)
так тебе и высылал... не дошло? мыло s_wr@mail.ru нерабочее?

> Может сюда?
куда сюда? кладовка не работает. и потом до вторника все откладывается в любом случае, с работы слал, пример хоть и простенький но набивать повторно желания нет.


KSergey   (2004-11-06 10:26:00) [6]

> sniknik ©   (05.11.04 17:39) [9]
> никаких "ждите", не нужно. посмотри почту.

А мне, мне... ;)
Может сюда?


Санёк   (2004-11-05 17:47:00) [7]

А мне можно посмотреть???? Tualan@yandex.ru


sniknik   (2004-11-05 17:39:00) [8]

никаких "ждите", не нужно. посмотри почту.


KSergey   (2004-11-05 16:59:00) [9]

Возможно не Close, а cancel или что-то такое
А вообще точно помню недавно тут было подобное, автора тоже направили по пути асинхронных запросов, правда ему все хотелось мнгновенной реакции, но она не получается. Сам что-то тоже экспериментировал на волне обсуждения, но в упор не помню.

Наверное просто прибивать тред не стоит. Достаточно по нажании кнопки пользователем сделать вид что все прервано. Ну а там уж попытаться завершить внутри потока всю эту галиматью (а то и вовсе без потока - при асинхронном-то режиме).

Ну а если ему еще и прогу приспичило закрыть - ну тогда либо "ждите отмены", либо прибить - тут уже все равно в принципе.


Санёк   (2004-11-05 15:35:00) [10]

Удалено модератором
Примечание: дубль


Санёк   (2004-11-05 15:35:00) [11]

Удалено модератором
Примечание: дубль


Санёк   (2004-11-05 15:34:00) [12]

"Не удается выполнить операцию во время ассинхронного выполнения" это при закрытии приложения после Close. И выполнив Close программа всё равно продолжает жрать память... Что с этим делать???


sniknik   (2004-11-05 14:46:00) [13]

не врет, просто неправильно считает ;о), вернее считает не то чего юзеры ожидают, ожидают только память программы а оно дает всю пямять задействованную прогой и используемыми модулями (dll/com обьектами/...)
а только память программы в виндах это нечто мифическое. ;о))

> Как же можно прервать открытие набора данных????
элементарно, close, только открываться он должен в асинхронном режиме, иначе не будет доступа к методу до полного завершения открытия.


KSergey   (2004-11-05 13:57:00) [14]

> [2] Санёк   (05.11.04 12:57)
> Память мерял "Диспетчер задач Windows":),

Миллионы раз писалось тут - врет он!


Санёк   (2004-11-05 12:57:00) [15]

Память мерял "Диспетчер задач Windows":), неужели никак нельзя??? Как же можно прервать открытие набора данных????


KSergey   (2004-11-05 12:49:00) [16]

Чем память мерял?
Да и создать объект в одном потоке, уничтожить в другом... Впрочем, межет и не страшно, коль скоро того потока уже и нет...
Вот только TerminateThread в любом случае будет приводить к утечкам - ведь создается не только экземпляр DataSet, но и DBThread как минимум. Хотя его, наверное, можно уничтожить (в смысле дельфийский объект), а вот связаннве с ним системные ресурсы... только по закрытию проги...


Наверх

Титульная страница Поиск, карта сайта Написать письмо