Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Отладка приложения

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
topsel



Зарегистрирован: 29.01.2005
Сообщения: 10
Откуда: vladivostok

СообщениеДобавлено: Вт Май 17 2005 06:47    Заголовок сообщения: Отладка приложения Ответить с цитатой

Люди помогите.
Поток постепенно съедает память. Думаю что в этом виноват инкремент счетчика, но имеется процедура сброса счетчика на 0. много памяти брать не должен ( чилло сброса не больше 10ти).
вот код может кто поковыряет....
Код:
procedure Tmainproc.Execute; // основная процедура
var
  count:integer;
  time:integer;
  hPrinter: THandle;
  bResult: Boolean;
  cbBuf: DWORD;
  pcbNeeded: DWORD;
  pcReturned: DWORD;
  aJobs: array[0..99] of JOB_INFO_1;
  aInfo: pPRINTERINFO2;
  _cb:integer;
begin
  //устанавливаем счетчик в 0
count1:=0;
while true do   // запускаем код в циклическое исполнение
begin //open 1
sleep(100);  // задается период повторения цикла

if count1>(del-1) then //сброс счетчика
count1:=0;
prnt:=printername[count1];
 {выделение памяти под буфер и получение данных о заданиях печати}
cbBuf := 1000;
bResult := OpenPrinter(PChar(prnt), hPrinter, nil);

bResult := EnumJobs(hPrinter, 0, Length(aJobs), 1, @aJobs, cbBuf, pcbNeeded, pcReturned);
data0[count1]:='';
{составление строки сообщения клиента}
 if aJobs[0].pDocument<>nil then
 begin //open2
 count0[count1]:=count0[count1]+1;
 user:=aJobs[0].pUserName;
 if aJobs[0].TotalPages>aJobs[0].PagesPrinted then
 totalpages:=inttostr(aJobs[0].TotalPages)
 else
 totalpages:=inttostr(aJobs[0].PagesPrinted);
 if totalpages='0' then totalpages:='1';

 tasktime:=datetimetostr(SystemTimeToDate(aJobs[0].Submitted));

 data0[count1]:='-'+machine+'+'+prnt+'+'+user+'+'+totalpages+'+'+tasktime+'@';

 if  (data1[count1]='') and  (data0[count1]<>'')then
 data1[count1]:= data0[count1];

 {действие при превышении интервала печати}
 if Count0[count1]>600 then  // задаем время наличия задания в очереди печати
 begin //open3              // если оно находится более 5 минут то считается что
 cbBuf:=10000;       //есть ошибка
 count0[count1]:=0;
 data:='-'+machine+'+'+prnt+'+ERROR+'+totalpages+'+'+tasktime+'@';
 OpenPrinter(PChar(prnt), hPrinter, nil);
 for count:=0 to 50 do
 begin  //open4
 SetJob(hPrinter,aJobs[count].JobId ,0, 0,JOB_CONTROL_CANCEL);
 end; //close4
 ClosePrinter(hPrinter);
 end;  //close3
 end; //close2
{проверка окончания печати задания}
 if (aJobs[0].pDocument=nil) and (data1[count1]<>'') then
 begin  //open5
 data:=data1[count1];
 data1[count1]:='';
 Synchronize(ClientActiv);

 end; //close5

count1:=count1+0;
end; //close1
end; //close0


Спасибо всем кто смотрел...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
topsel



Зарегистрирован: 29.01.2005
Сообщения: 10
Откуда: vladivostok

СообщениеДобавлено: Ср Май 18 2005 06:34    Заголовок сообщения: Ответить с цитатой

переправил код, убрал все циклы кроме основного и
Код:
for .....do

оставил, а оно всеравно современем жрет, может это свойство tthread-а такое и его терминейтить надо????
как вообще память очищать???
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...