FPC+многопоточность

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

FPC+многопоточность

Сообщение unC0Rr » 05.10.2006 00:48:52

Здравствуйте, столкнулся с неприятной проблемой: программа (игра), написанная на паскале с использованием SDL падает в непредсказуемый момент времени при запуске второго потока. Необходимые синхронизации доступа к данным сделаны. Та же программа, скомпилированная при помощи Delphi работает стабильно. Падение, кстати, выражается не в исключении, а в простом выходе с сообщением "At end of ExceptionAddresStack". Поиск по "ExceptionAddresStack" в гугле выдаёт одни корки :) ума не приложу, что делать. Может это баг компилятора? Подскажите, пожалуйста, в чём может быть дело.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Cheb » 05.10.2006 03:58:48

Сам я многопоточностью не пользуюсь, но слышал, что в FPC её надо как-то дополнительно включать. То-ли модуль какой добавлять к программе, то-ли ещё что. Короче, муть какая-то.
В TMemoryManager, к слову, в отличие от дельфиного есть булево поле NeedLock.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение Юра » 05.10.2006 12:40:30

Многопоточность не надо включать. Все делается автоматом при создании первого потока.

Похоже на баг с исключениями при использовании потоков.
Попробуй использовать FPC 2.1.x.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение unC0Rr » 05.10.2006 16:27:37

Немного почитал про многопоточность в freepascal... Возможно, проблема в том, что поток я создаю средствами SDL, а не rtl фрипаскаля? Но в потоке я не использую классы и динамическую память, поэтому косяков по идее быть не должно не смотря на то что компилятор не знает что относится к отдельному потоку, что нет.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Mirage » 05.10.2006 17:27:43

В Delphi многопоточность менеджера памяти надо включать, если не использовать TThread и еще какой-то встроенный метод.
isMultiThreaded := True;
Иначе возможны глюки даже со string'ами.
В FPC скорее всего тоже. Если поток создается левыми средствами (SDL), то компилятор не может определить многопоточность, надо ему сказать.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение unC0Rr » 05.10.2006 18:23:14

Не, строки тоже не используются... вообще ничего относящегося к динамической памяти... только стек. Спасибо за подсказку, попробую.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Юра » 05.10.2006 18:37:51

Возможно, проблема в том, что поток я создаю средствами SDL, а не rtl фрипаскаля?

В этом и проблема. Поток нужно средствами RTL создавать.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение unC0Rr » 05.10.2006 21:31:38

В этом и проблема. Поток нужно средствами RTL создавать.


Жаль... придётся городить кучку ifdef-ов. Хотелось бы сохранить совместимость с Delphi.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Юра » 06.10.2006 00:40:53

Зачем ifdef-ы? И в FPC и в Delphi можно использовать один и тот же TThread.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Mirage » 06.10.2006 07:07:05

Думаю, можно и средствами ОС и там и там. Просто надо почитать как сказать ему о многопоточности.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Сообщение unC0Rr » 06.10.2006 10:55:16

Зачем ifdef-ы? И в FPC и в Delphi можно использовать один и тот же TThread.


Ах да, маленькое ограничение: в программе принципиально не используются классы :)
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Sergei I. Gorelkin » 06.10.2006 12:33:56

Если классы не используются, есть процедура BeginThread.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru