| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Проблемы с Threads под Windows |
| Автор: ilyalyu 25.12.2006, 17:09 |
| Пишу программу с поддержкой Threads на Free Pascal под Windows. Возникли следующие проблемы: 1. BeginThread всегда выдает ошибку, хотя поток запускается и нормально работает. 2. Не работают WaitForThreadTerminate, KillThread (единственное, что работает, это EnterCriticalSection и LeaveCriticalSection). Кто-нибудь сталкивался с таким? |
| Автор: Snowy 25.12.2006, 17:18 |
| Попробуй создавать через CreateThread. Уничтожать TerminateThread. И вообще - какие ошибки выдаёт? |
| Автор: ilyalyu 25.12.2006, 19:48 | ||||
| В описании модуля System (равно, как и других модулей Free Pascal) функции CreateThread и TerminateThread отсутствуют (может быть в других версиях Паскаля они и есть). Функции возвращают только коды ошибок, которые, как следует из описания, "специфичны для системы". Номера разные, где их посмотреть, я не знаю. Еще один непонятный момент. Я проверил работу критических секций с помощью приблизительно следующего кода:
В случае правильного функционирования, второй поток должен дождаться, пока первый поток не выйдет из критической секции, и в результате вторая точка должна появиться через три секунды после первой. Так оно и происходит. Однако, когда я в реальной программе вывожу текст внутри критической секции и одновременно внутри основного потока, то тексты перемешиваются. Вот коротенький код для наглядного описания проблемы:
Иногда точки выводятся внутри 'long long long text'. Как это согласуется с предыдущей проверкой я не понимаю. Ведь по идее основной поток не должен выполняться, пока функция f не выйдет из критической секции. |
| Автор: ilyalyu 25.12.2006, 21:09 |
| По поводу подключения модуля windows - не вариант, так как код должен в дальнейшем компилироваться и на других платформах. Именно поэтому пишу на Free Pascal, а не на Delphi. Впрочем, остановку потоков я могу реализовать и программными методами, без KillThread. Хотя, хотелось бы все-таки разобраться. По поводу критических секций - спасибо за объяснение. Все понял. |