Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-01-25

Re[4]: Delphi OpenGL

Здравствуйте, Александр.

Вы писали 17 января 2005 г., 23:15:43:

АТ> Здоровеньки булы, shapoklak!

АТ> 13 января 2005 г., четверг, 17:33:47 (GMT+05:00), пришел ко мне
АТ> почтальон Почкин и всучил письмо с пометкой "Delphi OpenGL",
АТ> в котором сообщалось следующее:

s>> А еще вопрос с OpenGL. Вот на любом языке хоть на Delphi хоть на C++
s>> подскажите пожалуйста вывести изображение на _определенную часть_
s>> формы, а не на всю. Если можно, то как?

АТ> DC := GetDC (Handle);
АТ> SetDCPixelFormat(DC);
АТ> hrc := wglCreateContext(DC);
АТ> wglMakeCurrent(DC, hrc);

АТ> Вот в этом куске кода вместо Handle подставь Panel1.Handle и Panel
АТ> хоть 20x2000 сделай - пусчай на нем рисует.

Сделал... и получил синий экран смерти...

   2005-01-25 23:16:16 (#304518)

Re[4]: Ошибка при удалении обьекта. Delphi

Здоровеньки булы, Емельянов Алексей!

18 января 2005 г., вторник, 12:07:52 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Ошибка при удалении обьекта. Delphi",
в котором сообщалось следующее:

ЕА> Что-то я не помню ни одной операционки которая могла бы сама решить,
ЕА> что процесс больше не будет пользоваться тем или иным ресурсом,
ЕА> если он сам не закрыл все ссылки на него. Освобождаются они
ЕА> лишь при завершении процесса. Так что в этом отношении
ЕА> на Windows незачем грешить.
ЕА> А насчет конкретного случая - есть любимая ошибка использующих
ЕА> CreateProcess - даже если закрывают дескриптор процесса в структуре
ЕА> PROCESS_INFORMATION, забывают закрыть дескриптор потока.
ЕА> В сочетании с возможными утечками ресурсов в запускаемом
ЕА> процессе это при больших нагрузках убьет кого угодно.
ЕА> Возможно, у Вас произошло именно это. Кстати, запускать bat
ЕА> через CreateProcess, мягко говоря, не слишком эффективно.
ЕА> Почему бы не собрать командную строку в памяти
ЕА> и создавать процесс с указанием exe?

function Start(FileName: string; TmpPasToProcessing: string): boolean;
var
si: TStartupInfo;
p: TProcessInformation;
tmp: DWORD;
begin
Result := true;
FillChar(Si, SizeOf(Si), 0);
with Si do
begin
cb := SizeOf( Si);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := SW_HIDE;
end;
if not Createprocess('d:\p\1.bat', '', nil, nil, true, CREATE_NEW_CONSOLE,
nil, 'D:\p', si, p)
then
begin
ShowMessage(SysErrorMessage(GetLastError));
FormatForm.Terminate := true;
end;
tmp := GetTickCount;
while Waitforsingleobject(p.hProcess, 10) = WAIT_TIMEOUT do
begin
if GetTickCount - Tmp > 500 then
begin
Result := false;
Click;
TerminatePasind;
FormatForm.MemoNotProcessing.Lines.Add(IntToStr(GetTickCount) +':limit
' + FileName);
FormatForm.MemoNotProcessing.Lines.Add(TmpPasToProcessing);
FormatForm.MemoNotProcessing.Lines.SaveToFile('d:\MemoNotProcessing.txt');
TerminateProcess(p.hProcess, 0);
end;
Application.ProcessMessages;
end;
CloseHandle(p.hProcess);
CloseHandle(p.hThread);
end;

Причем условие GetTickCount - Tmp > 500 не выполнялось, однако -
утечка налицо.

AT>> выдает division by zero - ну шо це таке, а?

ЕА> Не очень подробно,

Ну чуть поподробнее:
По MouseWheelDown производилась такая штука:
Scale := Scale - Scale / 10;
glScalef (Scale, Scale, Scale);

Короче изменение масштаба, дык вот это изменение происходило без
ошибок в win2k и выдавала division by zero в XP при переходе через
Scale = 0

ЕА> видимо эта проблема Вас не
ЕА> очень беспокоит или Вы ее решили.

Ну в общем правда :) Я эту прогу просто так сваял чтобы показать
другу что с OpenGL работать умею.

ЕА> арифметики возникают "ошибки ниоткуда".

Кстати да: может это просто это opengl32.dll в XP глючная (для
glScalef). Но это вряд ли.

   Александр Томилов 2005-01-25 23:13:45 (#304517)

Re[4]: Ошибка при удалении обьекта. Delphi

Здравствуйте !

> Рано или поздно при некотором упорстве можно решить почти любую
> проблему. Так что не будем зря обижать программистов
> Microsoft, тоже ведь люди :)
> Лет семь имею дело с их детищем и десятки, а то и сотни глюков, с
> которыми я встречался, были вызваны ошибками использующих
> Windows программистов, иногда ошибками сред разработки
> и очень редко проблемами самой операционки.
> Это вызывает некоторое уважение к тем, кто ее пишет :)

Кстати, почитайте вот:
http://russian.joelonsoftware.com/Articles/HowMicrosoftLosttheWaronA.htm
l

Оч. интересно и просто познавательно :)
Там как раз упоминается что в винде делали для защиты от ошибок
программистов при работе с памятью.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 3957
Возраст листа : 492 (дней)
Количество подписчиков : 521
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/304513
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-01-25 23:06:23 (#304513)