Шаг 137 - Прерывание потока в Windows 2000 – поиск выхода

Да конечно, вроде не проблема, есть функция TerminateThread. Не тут-то было. Я провел наверно сегодня часов 6 в поисках решения. Если пользоваться TerminateThread, то приложение, запущенное из VB просто виснет и все, то есть форма исчезает, а сама программа остается в памяти. Думая об этом, я закачал несколько примеров с интернета, например от Philipp Weidmann. Но эффект тот же. Может что-то и с Windows 2000, только пришел я к простому выводу, все нормально только в том случае, если поток заканчивается сам собой, то есть путем выхода из функции потока. Значит все просто, не нужно силой прерывать поток, нужно просто заставить его закончиться самому. Делаем кнопку Terminate:

gif/137_1.gif (3425 b)

В модуле переменную x делаем публичную:

Public x As Long
Public Const CREATE_SUSPENDED = &H4
........

А вот по Terminate или при закрытии формы присваиваем ей максимальное значение, что приводит к завершению потока естественным способом.

Private Sub Command1_Click()
x = 100000
End Sub

Private Sub Form_Unload(Cancel As Integer)
Command1_Click
End Sub

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


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.