purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 4:34 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Помогите убить поток.
СообщениеДобавлено: Вт мар 14, 2017 8:47 am 
Не в сети
ассистент

Зарегистрирован: Вс мар 12, 2017 2:53 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Подскажите как убить поток с потрохами в такой ситуации. В пурике код останавливается на KillThread(Create0), если скомпилировать приложение программа работает, но поток не завершается.
Код:
1
2
3
4
5
6
7
8
9
10
11
Procedure D(*a)
  DateInRun = 4000000000 ;дата запуска(условно)
;
;
EndProcedure
 
Create0=CreateThread( @D(),0)
PrioritCreate0=ThreadPriority(Create0, 32)
Delay(2000)
KillThread(Create0) ;место зависания
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите убить поток.
СообщениеДобавлено: Вт мар 14, 2017 10:03 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Отладчик недвусмысленно дает понять в чем дело
Цитата:
Указанный поток не существует.
К моменту завершения потока он уже сам завершил работу. Перед завершением нужно проверять есть ли поток
Код:
1
2
3
If IsThread(Create0)
  KillThread(Create0)
EndIf


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите убить поток.
СообщениеДобавлено: Вт мар 14, 2017 10:24 am 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 271
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Всегда делаю таким образом:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Global flag.b = 0
 
Procedure Potoc(*p)
  Repeat
    If flag = 1
      ProcedureReturn
    EndIf
    ;...
  ForEver
EndProcedure
 
;...
flag = 1
Delay(500) ; это при условии выхода из программы.
;...



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите убить поток.
СообщениеДобавлено: Вт мар 14, 2017 11:13 am 
Не в сети
ассистент

Зарегистрирован: Вс мар 12, 2017 2:53 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
repeat писал(а):
Всегда делаю таким образом:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Global flag.b = 0
 
Procedure Potoc(*p)
  Repeat
    If flag = 1
      ProcedureReturn
    EndIf
    ;...
  ForEver
EndProcedure
 
;...
flag = 1
Delay(500) ; это при условии выхода из программы.
;...



да флаг можно "всунуть" но не с DateInRun, если я передумал и хочу ввести другую дату, мне надо завершить поток , а не ждать пока флаг сработает, потому что если ввести новую дату создастся новый поток, с таким же флагом, причем открытым.

Решение Петра помогло, только я не понял в чем дело, как поток завершился, если дата DateInRun еще не наступила.
Выходит если я убью поток DateInRun все равно запустит код?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Помогите убить поток.
СообщениеДобавлено: Вт мар 14, 2017 11:53 am 
Не в сети
профессор

Зарегистрирован: Сб фев 06, 2016 6:18 pm
Сообщений: 271
Благодарил (а): 14 раз.
Поблагодарили: 32 раз.
Пункты репутации: 0
Help гласит: "поток немедленно убивается и не получает шанса выполнить какой-либо код завершения (например освободить память, удалить элементы, освободить собственный стек)". Эту функцию нужно использовать в крайних случаях.А флагу, при выходе из процедуры, присваивать 0 и дело то.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB