Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКритическая ошибка Найти похожие ветки
← →
ЧупаЧупс (2004-04-08 14:01) [0]Здравствуйте! Вот такая проблема: моя программа начинает выдавать сообщение о критической ошибке, после некоорго времени работы, причем она стоит на 20 компьютерах, и "гонит" только на 2ух компьютерах, у которых одинаковая конфигурация (целероны 2300)
А ошибка появляется во время выполнения следующего кода:
procedure ChangeDisplayResolution(x, y : word);
var
dm : TDEVMODE;
begin
ZeroMemory(@dm, sizeof(TDEVMODE));
dm.dmSize := sizeof(TDEVMODE);
dm.dmPelsWidth := x;
dm.dmPelsHeight := y;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
ChangeDisplaySettings(dm, CDS_UPDATEREGISTRY);
FreeMemory(@dm);
end;
...
procedure TFormTimeServer.Stop;
{Закрываем все окна}
function EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; Var
Nm:Array[0..255] of Char;
ZNAME:string;
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
Begin
If Wd<>FormTimeServer.Handle then
If IsWindowVisible(WD) then
If not IsIconic(WD) then
If isWindow(WD) then
begin
SendMessage(WD,WM_SYSCOMMAND,SC_Close,0);
end;
EnumProc := TRUE;
end;
{---------------}
var
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
data:TRxTxData;
Rect:TRect;
reg:TRegistry;
OldVal : LongInt;
Dummy,i:integer;
begin
Dummy := 0;
{Отключаем ALT-TAB}
SystemParametersInfo( SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);
{Отключаем CTRL-ALT-DEL}
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
for i:=0 to lbGames.count-1 do
begin
killprogram(nil,pchar(lbGames.Items.Strings[i]));
end;
if FileExists(path+"links\explorer.lnk") then DeleteFile(path+"links\explorer.lnk");
INET:=false;
EnumWindows (@EnumProc, 0);
FormLock.visible:=true;
Status:=0;
Hours:=0;
Minutes:=0;
Seconds:=0;
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey("Software\Shipilin\Gameserver", true);
reg.WriteInteger("Hours",Hours);
reg.WriteInteger("Minutes",Minutes);
reg.WriteInteger("Seconds",Seconds);
reg.WriteInteger("Status",Status);
reg.CloseKey;
finally
reg.free;
inherited;
end;
Data.IP:=GStack.LocalAddress; // инитиализируем данные для отправки
Data.Name:=Server.LocalName;
Data.Command:="STOP";
Data.Hours:=Hours;
Data.Minutes:=Minutes;
Data.Seconds:=Seconds;
Data.Status:=Status;
Server.SendBuffer(ServerIP,cServerPort,Data, SizeOf(Data));
TimerMinus.EndTimer;
FormTimeServer.WindowState:=wsMinimized;
if Screen.Height<>1024 then ChangeDisplayResolution(1024,768);
TimerLock.BeginTimer(LockCycle,TimerLock.MinPeriod); //запускаем блокирующий таймер
end;
.....
и вот это
procedure TFormTimeServer.TimerLockTimer(Sender: TObject);begin
SetCursorPos(0,0);
end;
В чем может быть проблема?
← →
Тимохов © (2004-04-08 14:04) [1]а что добраться отладчиком до строки, которая генерит ошибку не судьба?
← →
ЧупаЧупс (2004-04-08 14:15) [2]К примеру у мне ядома все прекрасно работает, на 18 компьютерах где она соит тоже прекрасно работает, а вот почему-то на 2-3 начинает "гнать" (на компьютеры грешить нельзя, все идеально! Где то ошибка в коде?)
← →
icWasya © (2004-04-08 14:24) [3]
procedure ChangeDisplayResolution(x, y : word);
var
dm : TDEVMODE;
begin
ZeroMemory(@dm, sizeof(TDEVMODE));
dm.dmSize := sizeof(TDEVMODE);
dm.dmPelsWidth := x;
dm.dmPelsHeight := y;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
ChangeDisplaySettings(dm, CDS_UPDATEREGISTRY);
FreeMemory(@dm); // что это такое ??????????
end;
...
← →
ЧупаЧупс (2004-04-08 14:27) [4]:)
← →
ЧупаЧупс (2004-04-08 14:49) [5]Даже если в этом ошибка, то почему тогда, программа "гонит" не на всех компах ???
← →
ЧупаЧупс (2004-04-08 15:25) [6]Никто не поможет :(
← →
Anatoly Podgoretsky © (2004-04-08 15:32) [7]Ты просто счастливчик
← →
ЧупаЧупс (2004-04-08 15:33) [8]"Я заметил :)"
← →
YurikGl © (2004-04-08 15:34) [9]Поставь на глючных компах делфю и вперед, либо делаешь Try+Except на каждую сточку и в Except выводишь на экран номер строки которая его вызвала.
try
ZeroMemory(@dm, sizeof(TDEVMODE));
except
showmessage("1-я строка")
try
dm.dmSize := sizeof(TDEVMODE);
except
showmessage("2-я строка")
try
dm.dmPelsWidth := x;
except
showmessage("3-я строка")
Запускаешь на сбойном компе и делаешь выводы
← →
Тимохов © (2004-04-08 15:34) [10]ответ вам уже дали.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.059 c