Конфликт модуля Crt и beginthread ???

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

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

Конфликт модуля Crt и beginthread ???

Сообщение bogus » 08.07.2009 15:28:09

При использовании модуля Crt функция beginthread работает неправильно и завершает основную программу. При этом, при выполнении beginthread проявляются артефакты (сдвигается вывод строки). Это баг модуля Crt ?
Простейший пример, объявляем Crt даже не вызывая функций и процедур модуля Crt - программа не дорабатывает до конца.
Код: Выделить всё
uses crt;

function thread0(p:pointer):longint;
begin
writeln('aaa');
writeln('bbb');
end;

begin
beginthread(@thread0);
writeln('yyy');
end.

Если убрать объявление модуля Crt:
Код: Выделить всё
function thread0(p:pointer):longint;
begin
writeln('aaa');
writeln('bbb');
end;

begin
beginthread(@thread0);
writeln('yyy');
end.

То всё прекрасно работает...
Бьюсь над проблемой уже месяца два... Помогите разобраться :?
Последний раз редактировалось bogus 08.07.2009 16:39:53, всего редактировалось 1 раз.
bogus
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Re: Конфликт модуля Crt и beginthread ???

Сообщение Иван Шихалев » 08.07.2009 15:55:20

Что значит "не вызывая"? А WriteLn?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Конфликт модуля Crt и beginthread ???

Сообщение bogus » 08.07.2009 16:09:08

WriteLn из System
bogus
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Re: Конфликт модуля Crt и beginthread ???

Сообщение Иван Шихалев » 08.07.2009 18:32:44

Его поведение в CRT переопределяется. Точнее переопределяется обработка переменных input и output.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Конфликт модуля Crt и beginthread ???

Сообщение bogus » 08.07.2009 21:27:58

Проблема старая... До сих пор не исправлено... :(
http://bugs.freepascal.org/view.php?id=11554
bogus
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Re: Конфликт модуля Crt и beginthread ???

Сообщение Иван Шихалев » 09.07.2009 06:22:40

А для чего используется CRT? Может, проще обойтись без него?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Конфликт модуля Crt и beginthread ???

Сообщение bogus » 09.07.2009 12:28:00

Видимо придётся использовать VIDEO
bogus
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Re: Конфликт модуля Crt и beginthread ???

Сообщение Max Rusov » 09.07.2009 12:57:00

Что бы Вы не использовали, делать вывод из разных потоков не синхронизированный через критические секции - не рекомендуется.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Конфликт модуля Crt и beginthread ???

Сообщение bogus » 10.07.2009 11:40:34

Max Rusov писал(а):Что бы Вы не использовали, делать вывод из разных потоков не синхронизированный через критические секции - не рекомендуется.


Неправильный вывод происходит даже если поток в единичном экземпляре.
bogus
незнакомец
 
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Re: Конфликт модуля Crt и beginthread ???

Сообщение Max Rusov » 10.07.2009 14:21:53

Если Вы запустили поток - то их уже два: основной и дополнительный.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03


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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 5

Рейтинг@Mail.ru