Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Критическая ошибка   Найти похожие ветки 

 
ЧупаЧупс   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
1-1081158482
СержК
2004-04-05 13:48
2004.04.25
При создании ТХТ файла выдает ошибку


1-1080897165
Stas
2004-04-02 13:12
2004.04.25
Перемещение формы не имеющей заголовка


3-1080205699
NorthMan
2004-03-25 12:08
2004.04.25
Проблема с динамическим ADOQuery


1-1081603595
Ilg
2004-04-10 17:26
2004.04.25
Максимальное количество строк в Memo


14-1080123294
Igor_thief
2004-03-24 13:14
2004.04.25
DelphiWorld.narod.ru