purebasic.info

PureBasic forum
Текущее время: Пт июн 22, 2018 12:38 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Чт апр 16, 2015 8:40 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Приветствую всех! Доделываю свою программу для поиска файлов-дубликатов до релизного состояния. Но обнаружил баг - редко (но все равно неприятно) программа вылетает сразу после окончания проверки. При этом ErrorLine() указывает на строку с кодом event = WaitWindowEvent. Проверка выполняется в отдельном потоке, трейдсейф естественно включен. Где здесь может быть проблема, помогите разобраться
Код:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
Procedure.s GetString(List Lst$(), i)
  If SelectElement(Lst$(), i)
    ProcedureReturn Lst$()
  EndIf
EndProcedure
 
Procedure ClearAfterSearch()
  ClearList(files())
  Pause = 0
  ClearList(Search\Folders$())
  ClearList(Search\Ext$())
  ClearList(Search\BlackList$())
  ClearList(Search\WhiteList$())
EndProcedure
 
Procedure Start(V)  
  ;Дейстивия до сканирования
 
  Compare(1)
 
  ;Действия после сканирования
 
  KillTimer_(WindowID(#ResultsWindow), 6)
  MessageRequester("DublFind", GetString(ProgramLang\Alerts$(), 2), #MB_ICONINFORMATION) ;Мессага с текстом "Сканирование завершено", она выводится
  ;Значит, баг после этого
  SetGadgetState(#ProgressBar, 0)
 
  ClearAfterSearch() ;Может быть здесь?
 
  SetGadgetText(#Pause, GetString(ProgramLang\ResultsWindow$(), 15)) ;А может и здесь
  SetGadgetText(#Stop, GetString(ProgramLang\ResultsWindow$(), 16))
 
  PureCOLOR_SetButtonColor(#Pause, $000000, $6859E7) ;А может и из-за PureColor...
  PureCOLOR_SetButtonColor(#Stop, $000000, $59E764)
 
  StatusBarText(0, 0, GetString(ProgramLang\ResultsWindow$(), 1) + " " + GetString(ProgramLang\ResultsWindow$(), 24))
 
  SetTimer_(WindowID(#ResultsWindow), 5, 500, @Disable())
EndProcedure

P.S. Сколько не пробовал под отладчиком запустить - все работает :? Да и в скомпилированном виде может в 2-3% случаях вылетает...

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт апр 17, 2015 4:25 am 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 230
Благодарил (а): 31 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
У меня как-раз подобная проблема, причем то-же по ErrorLine() возвращает то строку с Delay(), то с WaitWindowEvent(), и то-же много поточное приложение, и то-же сканирует файловую систему.
Пока подозрение на: ExamineDirectory() (подозреваю что не всегда срабатывает, и иногда возвращает 0 видимо, и при этом NextDirectoryEntry() проходит без ошибок(и видимо портит стек или что-то еще). Сейчас внедрил проверку, жду результата, у меня вылетает совсем редко. (почему грешу на ExamineDirectory() - явно пропускает одну (произвольную) папку когда прога падает, это видно по файлу лога, но падает явно позже сканирования.)

зы. полагаю да, это именно оно. (ошибки прекратились)
Надо проверять ExamineDirectory() на возвращаемое значение, не знаю какие там могут быть ошибки, диск ни куда не деётся, может тормозит кто (типа антивирус).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 08, 2015 2:45 pm 
Не в сети
ассистент

Зарегистрирован: Пт май 08, 2015 2:24 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
эмм хотелось бы весь код а не только процедуры


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 08, 2015 7:15 pm 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 230
Благодарил (а): 31 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
уточните, что именно интересует, "весь код" - это как-то слишком широко.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 10, 2015 10:19 pm 
Не в сети
ассистент

Зарегистрирован: Пт май 08, 2015 2:24 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
ну к примеру саму строку с ошибкой


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вс май 10, 2015 10:25 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
По моему я об этом написал
Цитата:
При этом ErrorLine() указывает на строку с кодом event = WaitWindowEvent

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 12, 2015 2:59 pm 
Не в сети
ассистент

Зарегистрирован: Пт май 08, 2015 2:24 pm
Сообщений: 13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
ну я имел ввиду, что по частям кода трудно установить причину ошибки. и если бы было более кода то можно было бы поискать.
так могу предложить заменить вэйтвиндовэвент на виндовэвент+делай(20) и спровоцировать ошибку, если она повторится то есть возможность того что конфликт окон если открыто более одного окна и так далее... но если лень искать то можно при ошибке перезагружать программу типа
OnErrorGoto sub_reload_this_programm
event=WaitWindowEvent()
OnErrorGoto sub_standartnii_obrabotchik_oshibok


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 12, 2015 3:35 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
У меня PureColor с многопоточностью конфликтовал, это я точно помню, пришлось отказываться от разноцветных кнопок.
У меня ещё и CURL некорректно работал, пока не переписал две процедуры. Это я к тому, что в библиотеках может быть масса недочётов, связанных с многопоточным программированием.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт май 12, 2015 3:49 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11186
Благодарил (а): 4 раз.
Поблагодарили: 415 раз.
m0t0d0r писал(а):
У меня PureColor с многопоточностью конфликтовал
Подсистема была UserLibThreadSafe или UserLibUnicodeThreadSafe?

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 13, 2015 12:40 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Пётр писал(а):
m0t0d0r писал(а):
У меня PureColor с многопоточностью конфликтовал
Подсистема была UserLibThreadSafe или UserLibUnicodeThreadSafe?


Чё это такое? :D
Я в эту строку в настройках компилятора вообще некогда нечего не вписывал, я даже не знаю зачем это :D .
Помню, что глючило и ошибка была в разных строках, отследить не возможно. Убрал PureColor, всё встало на круги свои.
Я даже помоему где то на форуме писал об этом (спрашивал об этом).

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 13, 2015 7:58 am 
Не в сети
PureBasic Coder
Аватар пользователя

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

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср май 13, 2015 10:03 am 
Не в сети
профессор
Аватар пользователя

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


Ясно, но так как я юникодом почти не баловался, то видимо глючило не из за этого.
Где надо было, я юникод в анси переделывал, а галку в настройках не включал.
Вообще это давно было, я всех деталей уже не помню. Попробуй от либ поочередно отказаться, может поможет.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 11, 2018 4:06 pm 
Не в сети
доцент

Зарегистрирован: Пн мар 30, 2015 5:48 pm
Сообщений: 37
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Всем привет!
У меня многопоточное приложение (кодировка исходного файла - UTF-8). Есть пара вопросов:

1) Для корректной работы приложения необходимо в настройках компилятора указать библиотеку подсистемы UserLibUnicodeThreadSafe. Если нет этой библиотеки в C:\Program Files\PureBasic\SubSystems\UserLibUnicodeThreadSafe, то где ее найти?
В версии PureBasic 5.31 компилятор пишет, что не найдена библиотека.

2) Попробовал в PureBasic 5.60 Portable, там все работает и без указания библиотеки подсистемы. В папке SubSystems я не нашел UserLibUnicodeThreadSafe. Кроме того, в версии 5.60 в настройках компилятора нет пункта "Создать юникод-приложение".
В версии 5.60 компилятор сам подключает UserLibUnicodeThreadSafe и создает юникодное приложение?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 11, 2018 4:38 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11186
Благодарил (а): 4 раз.
Поблагодарили: 415 раз.
fil@tov писал(а):
1) Для корректной работы приложения необходимо в настройках компилятора указать библиотеку подсистемы UserLibUnicodeThreadSafe. Если нет этой библиотеки в C:\Program Files\PureBasic\SubSystems\UserLibUnicodeThreadSafe, то где ее найти?
Она может быть не собрана с поддержкой многопоточности или все собрано в одном файле. Собирать нужно из исходников программой TailBite.

fil@tov писал(а):
2) Попробовал в PureBasic 5.60 Portable, там все работает и без указания библиотеки подсистемы.
Значит все версии библиотеки в одном файле.

fil@tov писал(а):
Кроме того, в версии 5.60 в настройках компилятора нет пункта "Создать юникод-приложение".
Потому что начиная с 5.50 ASCII не поддерживается.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн июн 11, 2018 5:49 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 154
Благодарил (а): 85 раз.
Поблагодарили: 3 раз.
Пункты репутации: 0
[/quote]Потому что начиная с 5.50 ASCII не поддерживается.[/quote]
а он вообще нужен? Для отдельных функций и строк есть флаги, чтобы подсунуть или вывести строку в ASCII. Размер исходника из-за юникода увеличивается незначительно..
п.с. недавно прочитал, что x86 прекращает своё существование с 2020. На линуксе уже сейчас трудности с запуском х86.


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

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


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

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


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

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