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

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

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

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

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

Сообщение bogus »

При использовании модуля 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 раз.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Что значит "не вызывая"? А WriteLn?
bogus
незнакомец
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Сообщение bogus »

WriteLn из System
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Его поведение в CRT переопределяется. Точнее переопределяется обработка переменных input и output.
bogus
незнакомец
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Сообщение bogus »

Проблема старая... До сих пор не исправлено... :(
http://bugs.freepascal.org/view.php?id=11554
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

А для чего используется CRT? Может, проще обойтись без него?
bogus
незнакомец
Сообщения: 5
Зарегистрирован: 08.07.2009 15:06:17

Сообщение bogus »

Видимо придётся использовать VIDEO
Max Rusov
постоялец
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Сообщение Max Rusov »

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

Сообщение bogus »

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


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

Сообщение Max Rusov »

Если Вы запустили поток - то их уже два: основной и дополнительный.
Ответить