Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2013, 18:40
ValeryB ValeryB вне форума
Прохожий
 
Регистрация: 09.05.2013
Сообщения: 15
Версия Delphi: Delphi 5
Репутация: 10
По умолчанию Не работает TerminateThread

Есть процедура в отдельном потоке

Код:
Procedure DoNothing;
begin
while true do;
end;
MAD: !!!!! >:-(

Я хочу её убить TerminateThread
Как не странно, но она не убивается этой функцией.


В описании написано, что
Windows NT: The handle must have THREAD_TERMINATE access. For more information, see Thread Objects.

Но ни в помощи, ни в гугле нет ни единого примера. Может кто подсказать ?

Последний раз редактировалось M.A.D.M.A.N., 26.08.2013 в 21:17.
Ответить с цитированием
  #2  
Старый 26.08.2013, 18:47
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Ваш код покажите, пожалуйста.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 26.08.2013, 18:53
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а еще в писании сказано:
Цитата:
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Поток кто создает?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 26.08.2013, 18:59
ValeryB ValeryB вне форума
Прохожий
 
Регистрация: 09.05.2013
Сообщения: 15
Версия Delphi: Delphi 5
Репутация: 10
По умолчанию

Поток создаёт WinAPI
CreateThread(nil,0,@DoNothing,nil,0,ConnectThreadI D);

И такой константы THREAD_TERMINATE нет.
Ответить с цитированием
  #5  
Старый 26.08.2013, 19:34
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

это не константа:
Цитата:
The thread handle returned by the CreateThread and CreateProcess functions has THREAD_TERMINATE access, so any caller holding one of these handles can terminate your thread.
и что все-таки с GetLastError ? и почему бы не завершить поток корректно, без утечки ресурсов?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 26.08.2013, 20:52
ValeryB ValeryB вне форума
Прохожий
 
Регистрация: 09.05.2013
Сообщения: 15
Версия Delphi: Delphi 5
Репутация: 10
По умолчанию

Всё, разобрался. Моя ошибка.
SysErrorMessage = Неверный дескриптор.

Надо было делать так:

Код:
Hndle:= CreateThread(nil,0,@DoNothing,nil,0,ThreadHandle);
TerminateThread(Hndle,0);
MAD: оформляем код, блин

Просто в описании ф-ции CreateThread написано, что
LPDWORD lpThreadId // pointer to returned thread identifier
И то, что дескриптор должен обладать признаком THREAD_TERMINATE
Вообщем, тогда я не понимаю что это всё значит.

Ну и пару встречных вопросов:
1. А как можно правильно завершить поток выполняющий while true do; ?
2. Можно как нибудь избавиться от утечки ресурсов в бесклассовом треде завершённым таким образом(через ThreadTerminate) ?

Последний раз редактировалось M.A.D.M.A.N., 26.08.2013 в 21:21.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025