Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему Винды начинают тормазить при записи в порт [D3]


Cranium ©   (2002-03-31 00:11:00) 

Использую следующий код для печети в порт..... При этом система начинает тормозить... Что делать чтоб работало без тормозов?

Процедура открытия порта :
procedure TFormCon.OpenPort;
begin
FHandle := CreateFile("LPT1", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ
or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if FHandle = INVALID_HANDLE_VALUE then
begin
if FErrorString <> nil then
LocalFree(Integer(FErrorString));
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
nil,
GetLastError(),
LANG_USER_DEFAULT,
@FErrorString,
0,
nil);
{SetErrorString; }
raise Exception.Create(FErrorString);
end
else
FPrinterOpen := True;
end;
Процедура записи в порт:
procedure TFormCon.Write(const Str: string);
begin
if not FPrinterOpen then
Exit;
NumberOfBytesToWrite := Length(Str);
OEMStr := PChar(LocalAlloc(LMEM_FIXED, NumberOfBytesToWrite + 1));
try
CharToOem(PChar(Str), OEMStr);
if not WriteFile(FHandle, OEMStr^, NumberOfBytesToWrite,
FNumberOfBytesWritten, nil) then
begin
if FErrorString <> nil then
LocalFree(Integer(FErrorString));
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
nil,
GetLastError(),
LANG_USER_DEFAULT,
@FErrorString,
0,
nil);
{SetErrorString;}
raise Exception.Create(FErrorString);
end;
finally
LocalFree(Integer(OEMStr));
end;
end;


Процедура закрытия порта:
procedure TFormCon.ClosePort;
begin
CloseHandle(FHandle);
if FErrorString <> nil then
LocalFree(Integer(FErrorString));
end;


cranium   (2002-04-01 23:23:00) [1]

Все это здорово, но беда втом что писть в порт надо на прямую и ни каких графических режимов не надо, только к примеру #110#112#123#10
и ни чего больше.......


don-do   (2002-04-01 09:31:00) [2]

Есть функции Escape(F1) позволяют печатать как в тексте так и в графике.
Также если печатать на удаленный принтер
(например если вместо "LPT1" использовать "PrintServer\Printer1")
то печать происходит через WinSpool и тормозов не наблюдается
я перекрестил стоящие рядом 2-е тачки и userы остались довольны


Doom   (2002-03-31 00:20:00) [3]

это медленный порт тормозит тачку Попробуй посылать маленькими кусками поменьше


Наверх

Титульная страница Поиск, карта сайта Написать письмо