Главная страница
    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.059 c
3-1080301555
gedd
2004-03-26 14:45
2004.04.25
Зашита базы Access


14-1080807245
PVOzerski
2004-04-01 12:14
2004.04.25
Не разбирается ли кто-нибудь в распайках USB-"выкидышей"


1-1081338901
Chapha
2004-04-07 15:55
2004.04.25
Unicode


3-1080667394
StatusQuo
2004-03-30 21:23
2004.04.25
DbLookupComboBox


8-1074944902
_MAD_
2004-01-24 14:48
2004.04.25
работа с bmp





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