Проблема с потоками

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Проблема с потоками

Сообщение Prickly » 10.10.2005 (Пн) 21:46

Привет всем!

Перехожу сразу к делу.

Я создаю несколько потоков с помощью CreateThread. И все нормально пока не начинаю их закрывать :) Суть в том, что закрыв потоки (TerminateThread) я не могу выгрузить свою программу стандартными методами. Только по end process Task Manager'a.

Короче, может кто сталкивался с данной проблемой?

Заранее спасибо
Не было бы Гейтса, не было бы нас!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.10.2005 (Пн) 21:53

Странно, что ты вообще можешь создавать и выгружать потоки, и что VB не вылетает...
Посмотри через Spy++, может ты не все потоки удалил?
Если у процесса нет потоков, он полюбому уничтожается....
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 10.10.2005 (Пн) 21:56

Нет конечно один остается. Я имел ввиду уничтожаю только созданные мной потоки.
Не было бы Гейтса, не было бы нас!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 10.10.2005 (Пн) 23:11

А какие существуют стандартные методики по выгрузке по выгрузке программы? Кстати, язык VB6 или VB.net? Неужели оператор End не помогает?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.10.2005 (Пн) 23:27

Ы.

Нет чтобы вежливо потоки закрывать...

Ну ладно.
А CloseHandle ты делаешь на hThread?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.10.2005 (Вт) 9:33

Ну-ка марш в поиск - "TerminateThread".
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.10.2005 (Вт) 21:11

Antonariy
Прочитай внимательно вопрос, пожалуйста. Обратив особое внимание на слова, заключённые там в скобки.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Re: Проблема с потоками

Сообщение Prickly » 11.10.2005 (Вт) 21:24

to Antonariy:
Prickly писал(а):...Суть в том, что закрыв потоки (TerminateThread) я не могу выгрузить свою программу стандартными методами...


to GSerg: Не помогает.

TerminateThread mHandle, ByVal 0&
CloseHandle mHandle

to ANDLL: "end" не помогает. VB 6.0
Не было бы Гейтса, не было бы нас!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 11.10.2005 (Вт) 21:33

Как это end не помогает?
А ExitProcess то же не помогает?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 11.10.2005 (Вт) 21:49

ExitProcess помог, спасибо!
Не было бы Гейтса, не было бы нас!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 12.10.2005 (Ср) 9:08

Antonariy
Прочитай внимательно вопрос, пожалуйста. Обратив особое внимание на слова, заключённые там в скобки.

Тема выхода из потока обсасывалась не раз, каждый раз звучало утверждение, что TerminateThread использовать нельзя и там же обсуждались альтернативные варианты.

Так что поиск все-таки рулит :!:
Лучший способ понять что-то самому — объяснить это другому.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.10.2005 (Ср) 10:59

2Prickly:Сдается мне, что остаются у тебя потоки, которые ты не закрыл...
2Antonariy:С чего бы это? В одной книге рекомендуется юзать ExitThread вместо return'а...
А TerminateThread это в принципе то же самое...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.10.2005 (Ср) 13:08

ANDLL, ты не прав.
ExitThread и return - это в точности одно и то же. Вернее, в точке возврата из нити (в kernel32.dll) стоит вызов ExitThread.
А вот TerminateThread - совсем другое дело:
MSDN писал(а):TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated. DLLs attached to the thread are not notified that the thread is terminating.

TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination. For example, TerminateThread can result in the following problems:
  • If the target thread owns a critical section, the critical section will not be released.
  • If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
  • If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.
Изображение

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 13.10.2005 (Чт) 20:08

2ANDLL: Нет потоки я все закрыл. Это точно.
Не было бы Гейтса, не было бы нас!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 128

    TopList