Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
14-1080619470
Dmitriy O.
2004-03-30 08:04
2004.04.25
Если ты лежишь больной, если завтра выходной..."


14-1081187191
gn
2004-04-05 21:46
2004.04.25
Эволюция Hello World


14-1080643685
ИМХО
2004-03-30 14:48
2004.04.25
Вопрос про окулистов (и не только про них)


3-1080216260
Anna
2004-03-25 15:04
2004.04.25
Как добавить поле в Dataset на этапе выполнения


1-1081630447
Klopan
2004-04-11 00:54
2004.04.25
сохранение/загрузка ListView в/из файл.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский