Проблеми с WIN98
8 отговора
396 прегледа
Проблеми с WIN98
Имам приложение, което има 120 форми с база на Interbase и на WIN XP си бачка перфектно,
но под 98 много често дава някакви неясни системни грешки от типа на
Illegal operation. Не мога да измисля къде да търся проблема.
Ако някой има идеи ....
но под 98 много често дава някакви неясни системни грешки от типа на
Illegal operation. Не мога да измисля къде да търся проблема.
Ако някой има идеи ....
Re: Проблеми с WIN98
Ако формите се създават автоматично, най-вероятно се изчерпват системните ресурси, които при Win9x са ограничени и системата се срива (нe достига памет за handles).
Mixy
Mixy
Re: Проблеми с WIN98
Както каза Mixy - търси зора в системните ресурси. За 98 ще ти помогне System Resource Meter - програмката е част от Windows инсталацията.
чети и дишай по-леко
чети и дишай по-леко
Re: Проблеми с WIN98
60% от формите съм ги направил да се криейтват само при употреба,
а после се унищожават. Като закономерност съм забелязал, че забива на-често при печат с QuickReport.
а после се унищожават. Като закономерност съм забелязал, че забива на-често при печат с QuickReport.
Re: Проблеми с WIN98
Това, което мога да направя в тази връзка е да отрежа още форми
при първоначалното зареждане и евентуално да си видя Куеритата
дали не може да се оптимизира нещо.
Дали може и още неща да се проверят. Нещо което не се сещам?
при първоначалното зареждане и евентуално да си видя Куеритата
дали не може да се оптимизира нещо.
Дали може и още неща да се проверят. Нещо което не се сещам?
Re: Проблеми с WIN98
Resource Metter показваше 3 ресурса (цитирам по памет, та може и да лъжа) - свободна/заета памет, ресурси за обекти и графични ресурси. Добре е да го пуснеш и следиш по време на изпълнение на програмата, за да видиш къде ще има зор.
Естествено е да почнеш да елиминираш части от програмата и да видиш кой модул се сгъбясва. Друг вариант е да прихванеш всички възможни грешки на едно централно място, или да направиш лог файл - в него записваш каква операция е извършена. Така като забие ще знаеш в коя точка е станало.
чети и дишай по-леко
Естествено е да почнеш да елиминираш части от програмата и да видиш кой модул се сгъбясва. Друг вариант е да прихванеш всички възможни грешки на едно централно място, или да направиш лог файл - в него записваш каква операция е извършена. Така като забие ще знаеш в коя точка е станало.
чети и дишай по-леко
Re: Проблеми с WIN98
Пробвай ето това:
Компилира се и работи само под Win9x. Аз си бях направил една малка
програмка - таймер и 3 етикета във форма. Таймера генерираше събитие
през половин секунда и опресняваше етикетите с данните за трите типа
системни ресурси в Win9x, наследени още от Win 3.1. Ако искаш, ще опитам
да я потърся.
Mixy
unit FreeRes;
{ Get free system resources in Windows 95.
For reasons unknown outside of Microsoft, the Win32 API
does not define the GetFreeSystemResources function.
The only way to get this information is to call a 16-bit
function in USER.EXE. You can try messing around with thunking,
but there's an easier way in Windows 95. (I don't know how
to do this in NT, though.)
This information comes from "Windows 95 System Programming Secrets"
by Matt Pietrek.
This unit provides the GetFreeSystemResources function
for Windows 95. See the Windows 3.1 API documentation
to learn more about this function.
Copyright © 1996 Tempest Software
You may use this software as part of an application program
without fee or royalty. Use this software at your own risk.
As free software, it is offered without guarantee.
}
interface
const
Gfsr_SystemResources = 0;
Gfsr_GdiResources = 1;
Gfsr_UserResources = 2;
function GetFreeSystemResources(SysResource: Word): Word;
implementation
uses SysUtils, Windows;
{ Undocumented Kernel32 calls. }
function LoadLibrary16(LibraryName: PChar): THandle; stdcall; external kernel32 index 35;
procedure FreeLibrary16(HInstance: THandle); stdcall; external kernel32 index 36;
function GetProcAddress16(Hinstance: THandle; ProcName: PChar): Pointer; stdcall; external kernel32 index 37;
procedure QT_Thunk; cdecl; external kernel32 name 'QT_Thunk';
{ Use global variables, so QT_Thunk does not trash them. }
var
hInst16: THandle;
GFSR: Pointer;
{ QT_Thunk needs a stack frame. }
{$StackFrames On}
{ Thunking call to 16-bit USER.EXE. The ThunkTrash argument
allocates space on the stack for QT_Thunk. }
function GetFreeSystemResources(SysResource: Word): Word;
var
ThunkTrash: array[0..$20] of Word;
begin
{ Prevent the optimizer from getting rid of ThunkTrash. }
ThunkTrash[0] := hInst16;
hInst16 := LoadLibrary16('user.exe');
if hInst16 < 32 then
raise Exception.Create('Cannot load USER.EXE');
{ Decrement the usage count. This doesn't really free the
library, since USER.EXE is always loaded. }
FreeLibrary16(hInst16);
{ Get the function pointer for the 16-bit function in USER.EXE. }
GFSR := GetProcAddress16(hInst16, 'GetFreeSystemResources');
if GFSR = nil then
raise Exception.Create('Cannot get address of GetFreeSystemResources');
{ Thunk down to USER.EXE. }
asm
push SysResource { push arguments }
mov edx, GFSR { load 16-bit procedure pointer }
call QT_Thunk { call thunk }
mov Result, ax { save the result }
end;
end;
end.
Компилира се и работи само под Win9x. Аз си бях направил една малка
програмка - таймер и 3 етикета във форма. Таймера генерираше събитие
през половин секунда и опресняваше етикетите с данните за трите типа
системни ресурси в Win9x, наследени още от Win 3.1. Ако искаш, ще опитам
да я потърся.
Mixy
Re: Проблеми с WIN98
Благодаря,
с намаляване на създаваните форми нещата се подобряват.
Другото е че имах не къмитнати транзакции, в които се натрупваха
данни и памет много над системните ресурси.
По време на принт привю и печат също много натоварва, но не мога да направя много по- различно с Рипортите. всъщност там гърми най-често.
с намаляване на създаваните форми нещата се подобряват.
Другото е че имах не къмитнати транзакции, в които се натрупваха
данни и памет много над системните ресурси.
По време на принт привю и печат също много натоварва, но не мога да направя много по- различно с Рипортите. всъщност там гърми най-често.
Re: Проблеми с WIN98
Вчера в C++ Builder групата на [линк]
видях следното за Qreport-a:
Въпрос:
I'm using quickreports components for extracting records from a db. Everything works wonderfully, but sometimes when I close the report preview, I get an "out of system resources" error, which anyways doesn't prevent my application from keeping working. Does anybody know how to avoid this annoying signalling??
Отговор:
don't know if this helps but I go caught out by the fact that when you
preview a report the reports 'Before Print' event gets fired but the
'After Print' event does'nt as there is a separate 'After Preview'
event. If you close your datasets in the After Print event handler
they will remain open after a print preview unless you specify the same
handler for the After Preview event.
и това: ....I'm using PreviewModal() instead of
Preview() and I'm not getting the error anymore....
Дано ти помогне с нещо.
видях следното за Qreport-a:
Въпрос:
I'm using quickreports components for extracting records from a db. Everything works wonderfully, but sometimes when I close the report preview, I get an "out of system resources" error, which anyways doesn't prevent my application from keeping working. Does anybody know how to avoid this annoying signalling??
Отговор:
don't know if this helps but I go caught out by the fact that when you
preview a report the reports 'Before Print' event gets fired but the
'After Print' event does'nt as there is a separate 'After Preview'
event. If you close your datasets in the After Print event handler
they will remain open after a print preview unless you specify the same
handler for the After Preview event.
и това: ....I'm using PreviewModal() instead of
Preview() and I'm not getting the error anymore....
Дано ти помогне с нещо.