purebasic.info

PureBasic forum
Текущее время: Пт июл 20, 2018 1:59 am

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




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Потоки в Linux
СообщениеДобавлено: Пт окт 14, 2011 10:11 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Проблема с программой. Портирую с под Винды, там все нормально работало, в лине закомментировал\поменял всё, на что ругался компилятор. В результате очень часто вылетает ошибка:
The debugged executable quit unexpectedly.
т.е. Отлаживаемое приложение неожиданно завершило работу.
В общем прошу потестировать код, вот архив, внутри исходник (файл 0.7), иконки + звук (необходимо для работы кода). В идеале, работать он должен вот так (снимал под виндой), но сейчас у меня он только кое-как выводит окна.
Просто очень не хочеться все переводить в один поток, если на лине действительно траблы с потоками.
При включении пурифиера, ругается на строку 322 в коде, а именно
Код:
1
EndProcedure

, 0_0
Говорит, Invalid Memory access.
Прошу помощи, и очень надеюсь, что это я гдето накосячил --> это можно исправить.

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Потоки в линукс глючат.
Лучше (если есть возможность) обойтись без них.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 14, 2011 10:38 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Это крайне прискорбно. Получается придется полностью переписывать архитектуру программы, причем, хоть и вынужденно, но по-говнокодерски. Неужели до 4.5 версии не смогли потоки нормально допилить, как хоть остальные то пишут под линь на пурике...

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Cloud писал(а):
Неужели до 4.5 версии не смогли потоки нормально допилить
Видимо на Linux есть какая-то особенность с потоками.

Спроси на оф. форуме, может они что-то знают.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 14, 2011 10:46 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Другие ЯП могут корректно работать с потоками на лине, а Пурик нет. Хоть я пишу под линь практически только для получения навыков + спортивного интереса, но меня это неиллюзорно гневает. :evil:
Насчтет офф. форума - чтож, приедтся им разбираться в переводе гугл-транслейтора :)

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 14, 2011 11:15 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Cloud писал(а):
Другие ЯП могут корректно работать с потоками на лине, а Пурик нет.
Многие ЯП, используемые на лине - интерпретируемые (тот же питон).
Но ничего не мешает посмотреть как сделано в других языках и сделать тоже самое. Ведь пурик поддерживает Linux API.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 5:23 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Пётр писал(а):
Потоки в линукс глючат.

Возможно и глючат, но в данном коде, скорее всего глючит не поток, а код в нутри потока.
Cloud
Попробуй убрать из кода потков всё, что связано с иконкой в трее(проблемы из-за неё).

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 7:14 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Я конечно попробую, но отказываться от нее - не вариант, у меня 80% программы на ней завязано. :(

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 10:54 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Cloud писал(а):
но отказываться от нее - не вариант

В смысле от трея? Если да то не нужно отказываться. Я не понял почему, но если использовать в трее ".png" формат, то происходит ошибка доступа к памяти. Моё предположени - это кривая линуксовая библиотека PNG, до недавнего времени всё работало, а сейчас :cry: . Хотя с ImageGadget и со всем остальным работает(надо с треем поэкспериментировать, может чего неправильно делаю).
И в коде у тебя
Код:
1
Icon = AddSysTrayIcon(#PB_Any,win_id,ImageID(CatchImage(#PB_Any,?ico0)))


измени на
Код:
1
Icon = AddSysTrayIcon(#PB_Any,win_id, CatchImage(#PB_Any,?ico0))


И ещё, может я ошибаюсь, но зачем ты везде пишешь
Код:
1
ChangeSysTrayIcon(Icon,ImageID(CatchImage(#PB_Any,?ico2)))

наверно проще создать изображение CatchImage один раз в начале программы, а при смене иконки в трее подставлять готовое изображение(это может и есть ошибка из-за которой вылетает программа).

Я изменил иконки на формат ".jpeg", он без прозрачности но зато программа работает и практически не вылетает(проверить не могу в ввиду отсутствия аккаунта на том сайте).

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 12:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
lakomet писал(а):
измени на
А вот этого делать не надо!
У его ведь #PB_Any в место идентификатора!

lakomet писал(а):
И ещё, может я ошибаюсь, но зачем ты везде пишешь
А вот это кстати, уже недочет в программе, т. к. будет создаваться много изображений!
Если используется #PB_Any и картинка больше не нужна, нужно ее выгрузить функцией FreeImage().

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 2:07 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
проверить не могу в ввиду отсутствия аккаунта на том сайте

В самом начале кода
Login: ilove1ihate1@mailforspam.com
Pass: imsosorry
Если нужно, еще один акк:
Login: ilove2ihate2@mailforspam.com
Pass: imsosorry
Это так, на всякий случай)
Цитата:
практически не вылетает
- ну тоесть вылетает, и если да, то в каких случаях все же вылетает?
Цитата:
<...> но зачем ты везде пишешь <...> проще создать изображение CatchImage один раз в начале программы, а при смене иконки в трее подставлять готовое изображение <...>

Цитата:
Если используется #PB_Any и картинка больше не нужна, нужно ее выгрузить функцией FreeImage().
- понял, спасибо, подправлю
Цитата:
изменил иконки на формат ".jpeg"
- попробую сейчас, о результатах отпишусь

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 4:00 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Cloud писал(а):
- ну тоесть вылетает, и если да, то в каких случаях все же вылетает?

Непредсказуемо, может 5-10 минут работать, а может и сразу после запуска вылететь. Я уже писал, о том что из потоков нужно убрать все функции работы с гаджетами(т.е. изменение иконок, вывод тултипа над иконкой в трее и т.д.), спросишь почему? ну я так думаю, что у тебя происходит конфликт при обращении к гаджетам из разных потоков одновременно, отсюда и вылеты программы(ИМХО).

Плюс к этому ты киляеш потоки, а это опять же может быть причиной вылета, так как допустим ты вывел потоком №2 окно, а в это время поток №5 убил поток №2.

Ещё ты при смене языка пишешь для каждого гаджета
Цитата:
SetGadgetFont(#Text_10, LoadFont(#Font_Text_10, "Microsoft Sans Serif", h, #PB_Font_HighQuality))
, я бы загрузил фонт один раз в начале программы, а затем установил фонт по дефолту для всех гаджетов функцией SetGadgetFont(#PB_Default, FontID)

В общем и целом я бы на твоём месте, координально переписал прогу, вынеся в начало кода инициализацию иконок, шрифтов, музыки и т.д. управлять иконкой в трее лучше через мьютексы, семафоры или флаги.

Всё сказанное ИМХО (без обид).

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 4:52 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Пт июл 29, 2011 9:37 pm
Сообщений: 163
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
из потоков нужно убрать все функции работы с гаджетами

А куда мне их деть? Поток парсинга сайта обнаруживает изменение на сайте(например новое сообщение), ну и каким образом ему вывести окно? Или вы имеете ввиду работу с гаджетами паковать в отдельные процедуры, которые будут вызваться из потоков именно в качестве процедур, а не в качестве потоков? Если можно, покажите на примере, что вы имеете ввиду.
Цитата:
координально переписал прогу

Мне бы вот корректной работы программы добиться, а оптимизировать, и избавляться от быдлокодерства уже потом.
Да еще печалит то, что даже неясно в чем косяк, возможно если я сделаю все как вы сказали, я буду в 1 шаге от корректной работы программы, а может быть я просто оптимизирую неработающий код.

В любом случае спасибо, мне реально важна и нужна критика. :)

_________________
Windows Xp | Ubuntu 11.04 | Linux Mint 9 || PB 4.51 x86


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 5:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
Можно попробовать с помощью мьютексов разграничить обращение к гаджетам и иконке в трее, всех потоков.
Если это не поможет, то дело не в гаджетах и трее.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 15, 2011 5:22 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
Пётр писал(а):
то дело не в гаджетах и трее.

Дело именно в них, т.к. пока не появится новое сообщение(а следовательно и смена иконки) программа работает, если нет сообщений и не трогать иконку в трее программа работает, а если просто мышкой поводить над иконкой в трее сразу вылет.


Cloud писал(а):
Поток парсинга сайта обнаруживает изменение на сайте(например новое сообщение), ну и каким образом ему вывести окно?

Когда пришло новое сообшение, то записывай в какую нибудь глобальную переменную допустим true, а в главном цикле основного потока(программы) проверяй её, если false то ни чего не делай, а если true то выводи окно или меняй иконку и т.д. по необходимости.

_________________
.


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

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


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

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


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

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