![]() |
|
![]() ![]() ![]() |
|
knark |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2006 Репутация: нет Всего: нет |
Суть в том, что мне надо создать максимум потоков, потом заставить их сделать сложный запрос к базе данных, потом их все убить, и снова создать столько же потоков, и опять отправлять запросы. Винда мне дает выделить порядка двух штук потоков. После этого я их убиваю в цикле.
Но потом винда мне не дает больше создавать их. Постоянно отказывает.
Как убить поток и освободить ресурсы от него. |
||||
|
|||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
НИКОГДА не следует пользоваться функцией TerminateThread. Организуй логику так чтобы поток уничтожал сам себя.
P.S. и не думай что чем больше у тебя потоков, тем эффективней будет твоя программа. 2000 тредов это просто кошмар. -------------------- Подпись больше не нужна |
|||
|
||||
knark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2006 Репутация: нет Всего: нет |
Логика не катит. Дело в том что в треде запускается запрос к базе данных, тяжелый запрос. Мне надо прервать его.
Без TerminateThread не обойтись. |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
Хм.. то есть ты хочешь завершить тред в процессе выполнения ExecuteSQL?
-------------------- Подпись больше не нужна |
|||
|
||||
knark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2006 Репутация: нет Всего: нет |
Да
|
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
Что тут посоветуешь. Разбить запрос на небольшие и в промежутках между ними проверять, а не пора ли мне (потоку) умирать. Иначе TerminateThread, но это конечно наихудшее решение.
-------------------- Подпись больше не нужна |
|||
|
||||
knark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 21.1.2006 Репутация: нет Всего: нет |
Мне нужно узнать, сколько база данных сможет выдержать запросов. Суть в том что мне как раз надо что бы запрос выполянлся на ней, а на моем компе, он должен умереть, что бы освободить тред, для нового запроса.
|
|||
|
||||
Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: 3 Всего: 5 |
knark, а что за БД?
-------------------- Never again... |
|||
|
||||
Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
knark, не самый лучший способ узнать производительность субд ИМХО
-------------------- Подпись больше не нужна |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
А почему новый запрос нужно создавать в новом потоке? Почему существующий поток, выполнив один запрос, не может отправить следующий? А TerminateThread именно так и работает: убивает поток, но не освобождает ничего. Это аварийное завершение, а в нормальном случае поток должен завершаться сам. Так уж тут заведено. Например, как-то так: заведи потоков, сколько надо (хочешь). Сгенерированный запросы сложи где-нибудь в кучку. Каждый поток берет из кучки очередной запрос, отправляет, ждет, берет следующий, и т.д. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |