FreeBasic
Главная
Вход
Регистрация
Пятница, 27.12.2024, 03:46Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Перхват вывода в консоль
diakinДата: Среда, 27.04.2022, 18:44 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 11
Репутация: 0
Статус: Offline
Hi!
Потребовалось тут перехватить вывод в консоль и перенаправить его RichEdit в GUI программе.
Вывод в консоль длится долго, поэтому хочется чтобы в RichEdit появлялись символы из консоли сразу после начала вывода, а не после его завершения.
Как это можно сделать?
При помощи костылей как-то так (псевдо rapidQ basic) 
Код
'consout.exe
'имитация долгого вывода в консоле
t=1000
print 1110
sleep t
print 2220
sleep t
print 3330
'--------

далее 

Код
CompileStr$="consout.exe >123.txt" ' с перенаправлением  вывода в файл
run (CompileStr$) ' запускаем 

while FILEEXISTS("fin1")=0 ' пока не создан файл флаг завершения
ttt$=LoadString("123.txt") 'читаем файл
LogEdit.AddStrings(ttt$) 'добавляем в Richedit
sleep 0.5 ' пол-секунды
wend


Но на самом деле файл 123.txt блокируется на время записи , и пока не освободится прочитать из него невозможно.

без костылей через CreatePipe можно, но тоже с блокировкой.
А как бы читать тогда, когда запись еще идет?
 
haavДата: Среда, 27.04.2022, 20:30 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Привет!

Так чем пайпы не устраивают? Создавай с помощью CreatePipe и лови с помощью PeekNamedPipe+ReadFile. Никаких блокировок , PeekNamedPipe не блокирует , а просто указывает есть данные или нет , а дальше уж сам решай будешь читать с помощью ReadFile или пройдешь мимо. Если не знаешь как создавать , посмотри исходники моей программы , там есть отдельный файл pipe.bas. Там для Windows и Linux. Ничего сложного , разберешься.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: