purebasic.info

PureBasic forum
Текущее время: Чт авг 22, 2019 4:42 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
СообщениеДобавлено: Чт июн 26, 2014 4:56 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Чт июн 26, 2014 4:51 pm
Сообщений: 85
Откуда: Россия
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте, такая проблема. При использовании 2х и более потоков выполняется краш, при условии что в потоке не стоит Delay().
И вопрос - почему!?
И так вот этот код вызовет КРАШ:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Procedure ThreadProc(void)    
  While 1
    str_t.s = Str(12)
  Wend    
EndProcedure
 
  CreateThread(@ThreadProc(), 0)
 
  While 1
    str_45.s = Str(12)
  Wend
 



Вот этот код краш не вызывает:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Procedure ThreadProc(void)    
  While 1
    str_t.s = Str(12)
  Wend    
EndProcedure
 
  CreateThread(@ThreadProc(), 0)
 
  While 1
    str_45 = 12
  Wend
 



Все -же объясните, почему происходит краш если поток вызывает одну и туже функцию!?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 5:08 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6538
Благодарил (а): 28 раз.
Поблагодарили: 220 раз.
Пункты репутации: 57
Поддержка безопасного потока включена в настройках компилятора?

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 5:21 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Чт июн 26, 2014 4:51 pm
Сообщений: 85
Откуда: Россия
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy, нет. сейчас по пробую.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 5:22 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Чт июн 26, 2014 4:51 pm
Сообщений: 85
Откуда: Россия
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Все заработало, огромное спасибо... А не расскажите почему это происходило? И различия ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 6:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2320
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 75 раз.
Пункты репутации: 11
А чего тут рассказывать? Используешь потоки — ставишь галочку для их "безопасности". Не используешь — не ставишь :).
Ну, можно еще тут почитать:
http://ru.wikipedia.org/wiki/Thread-safety
Но это описана концепция программирования, а галка в PB — автоматизация, что-ли.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 8:19 pm 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 863
Благодарил (а): 90 раз.
Поблагодарили: 26 раз.
Пункты репутации: 5
qpAHToMAS писал(а):
Не используешь — не ставишь

Это обязательно или просто к слову пришлось?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 8:42 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Если у тебя есть потоки, галочка должна стоять обязательно! А то такие глюки будут, всегда разные и в самых неожиданных местах :D

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 9:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 884
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Всем привет, прилеплюсь к теме, так как тоже про потоки.
Собственно у меня не вопрос, просто нужно подтверждение.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Procedure thread(val)
  Debug ElapsedMilliseconds()-val
  For i=0 To 100000000
    a= a+1
  Next i
  Debug a
EndProcedure
 
start = ElapsedMilliseconds()
thread = CreateThread(@thread(), start)
Repeat
  If IsThread(thread)>0
    Break
  EndIf
ForEver
stop = ElapsedMilliseconds()-start
Debug stop
 
start = ElapsedMilliseconds()
Repeat
  If IsThread(thread)<=0
    Break
  EndIf
ForEver
stop = ElapsedMilliseconds()-start
Debug stop



У меня старт потока занимает 0млс, помнится раньше это требовало от 100-150 млс. Хотелось бы знать, что то изменилось в пурике, или что, ведь раньше, я точно помню, что поток стартовал не сразу.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 9:22 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11504
Благодарил (а): 4 раз.
Поблагодарили: 469 раз.
Время старта потока зависит от ОС. Может менятся в зависимости от версии ОС, железа, загруженности компа, и т. д.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 9:39 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 884
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Пётр писал(а):
Время старта потока зависит от ОС. Может менятся в зависимости от версии ОС, железа, загруженности компа, и т. д.

То-есть полагаться, что на моём железе так будет всегда, не стоит. Просто мне каждые 10 МЛС дороги. Ладно, спасибо.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 10:13 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Цитата:
То-есть полагаться, что на моём железе так будет всегда, не стоит
Не стоит. От CPU много что зависит здесь

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 26, 2014 11:04 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2320
Откуда: Russia — Belarus
Благодарил (а): 7 раз.
Поблагодарили: 75 раз.
Пункты репутации: 11
newJS писал(а):
qpAHToMAS писал(а):
Не используешь — не ставишь

Это обязательно или просто к слову пришлось?

Ну, а зачем компилировать с ThreadSafe, если у тебя в программе нет потоков?
Ради интереса проверил: эта галка добавляет 0.5 КБ веса к exe'шнику :).

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 27, 2014 5:39 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 863
Благодарил (а): 90 раз.
Поблагодарили: 26 раз.
Пункты репутации: 5
qpAHToMAS писал(а):
Ну, а зачем компилировать с ThreadSafe, если у тебя в программе нет потоков?
Ради интереса проверил: эта галка добавляет 0.5 КБ веса к exe'шнику

Именно про это и спрашивал, благодарствуем.


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

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


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

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


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

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