Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

Что такое буфер ядра и как его очищать.   Найти похожие ветки 

 
Duncan   (2003-07-21 13:31) [0]

Уважаемые мастера!
Столкнулся я с такой проблемой: моя прога написанная на D6 вызываеи дос-приложение (tethereal) 1 раз в 2 минуты. Приблизительно через 1200 минут запускаемое дос-приложение выдает сообщение типа:"Not enough memory to load tethereal into kernel buffer". Причем пробывал запускать и 1 раз в минуту, эфеект и время работы приблизительно такое же. Оперативки на борту 376Mb, в состоянии системы в результате экспериментов показало наличие минимум 30% свободной оперативки. Помогает только перезагрузка компа, а это иногда не совсем хорошо. Поэтому помогите разобраться как сделать так чтобы очищать буфер или хотябы дотянуть до 1500 минут (сутки).
Спасибо!


 
mzu   (2003-07-23 03:57) [1]

Извини, а приложение твоё корректно заканчивается за эти 2 минуты?


 
Е-Моё имя   (2003-07-23 09:15) [2]

а если даже некорректно?
все равно интерено, чо это за фигня такая


 
Duncan   (2003-07-23 09:44) [3]

Так в том то все и дело, что мое приложение висит в процессах постоянно и запускает дос-приложение каждые 2 минуты. ПОэтому корректность завершения полностью возлагаю на винды. Хотя может конечно и стоит (и надо ли) освобождать хендлы, но я не умею, поэтому подскажите плиз надо ли и как и в какой момент. Вот код запуска:
GetStartupInfo(StartupInfo);
with StartupInfo do begin
wShowWindow := SW_HIDE; //не показывать окно
( nil, PChar(pr+"a.bat") Так в том то все и дело, что мое приложение висит в процессах постоянно и запускает дос-приложение каждые 2 минуты. ПОэтому корректность завершения полностью возлагаю на винды. Хотя может конечно и стоит (и надо ли) освобождать хендлы, но я не умею, поэтому подскажите плиз надо ли и как и в какой момент. Вот код запуска:
GetStartupInfo(StartupInfo);
with StartupInfo do begin
wShowWindow := SW_HIDE; //не показывать окно
dwFlags := STARTF_USESHOWWINDOW; end;
CreateProcess(nil, PChar(pr+"a.bat"), nil, nil, FALSE, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcessInformation);


 
Spawn   (2003-07-23 11:20) [4]

А ты TerminateProcess то делаешь?


 
Duncan   (2003-07-23 11:33) [5]

Нет не делаю. А кстати, что лучше в данном случае делать
TerminateProcess(ProcessInformation.hProcess,???);
TerminateProcess(ProcessInformation.hThread,???);
или
CloseHandle(ProcessInformation.hProcess);
CloseHandle(ProcessInformation.hThread);


 
VMcL   (2003-07-23 14:15) [6]

>Duncan (23.07.03 11:33)

CloseHandle - освобождает HANDLE. TerminateProcess - прерывает процесс. Подробнее: см. г-на Рихтера и т. п.


 
VMcL   (2003-07-23 14:18) [7]

>Duncan (23.07.03 11:33)

Кстати, я подозреваю, что из-за того, что ты не вызываешь CloseHandle, запускаемое дос-приложение выдает сообщение типа:"Not enough memory to load tethereal into kernel buffer"

Причём, не дос-приложение это выдает, а ядро Windows, AFAIU.


 
Duncan   (2003-07-23 14:50) [8]

Вполне возможно, сейчас поставил на тест новую версию, результат будет завтра, вот и посмотрим. Но возникает вопрос следующего плана: я пробывал запускать ежеминутно, т.е. в 2 раза чаще, логично предположить что и буфер должен быть засорен в 2 раза быстрее, однако прога все-равно выдает ошибку через примерно 1200 минут. Почему?


 
Переяслов Григорий   (2003-07-23 14:54) [9]

А под Win2K или XP не пробовал?


 
Duncan   (2003-07-23 15:16) [10]

Пробовал под 2000 на 1 машине выдал что не может найти точку входа в процедуру CreateProcess, на 2 машине запустился хорошо, но сам tethereal (который я запускаю) не нашел интерфейс с которого надо считывать и поэтому просто закрывался :-(. Пробовал еще на 1 машине с линолиумом, но там оперативки меньше (128М), поэтому примерно через 5-6 часов работы выдавал, что не достаточно памяти для запуска программы (причем говорили сами винды) - эта ошибка вполне может быть связанна именно с не использованием CloseHandle.


 
dokdok   (2003-07-23 21:53) [11]

Уж простите, кинул просто фрагмент - прога живая, запускает всякие DOS-овые теликсы, батники, месяцами напролет...
Может пригодится

if not ProcIsLive(Job.ProcId) then
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
if Job.B1 then
si.wShowWindow := SW_SHOWMINNOACTIVE
else
si.wShowWindow := SW_SHOWNORMAL;
if not CreateProcess(nil, PChar(ListViewJob.Items[TRxTimerEvent(Sender).Tag].SubItems[3]), nil, nil, False, 0, nil, nil, si, pi) then
begin
ShowMessage( "CreateProcess failed." );
Exit;
end;
Job.ProcId := pi.dwProcessId;
with ListViewLog.Items.Add do
begin
Caption := ListViewJob.Items[TRxTimerEvent(Sender).Tag].Caption;
ImageIndex := 7;
SubItems.Add(DateToStr(Date)+ " " + TimeToStr(Time));
SubItemImages[0] := 11;
SubItems.Add(idUDPClient.LocalName);
SubItemImages[1] := -1;
SubItems.Add(ListViewJob.Items[TRxTimerEvent(Sender).Tag].SubItems[3]);
SubItems.Add("ProcessID - " + IntToStr(Job.ProcId));
//



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
14-18567
malkolinge
2003-09-18 00:59
2003.10.06
С Днем Рождения , Гоблин !


1-18379
Vorobyev Sergey
2003-09-20 08:22
2003.10.06
Как оставить консольное прилож. работать, убрав консольное окно?


1-18401
Вован
2003-09-25 15:32
2003.10.06
У когонибуть есть русский Consts.pas и DBConsts.pas ???


1-18351
MakNik
2003-09-23 11:24
2003.10.06
Динамически заменять компоненты


14-18604
E_Dimon
2003-09-17 12:50
2003.10.06
Ошибка в Windows 2000





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский