Afterwarp Development  

Go Back   Afterwarp Development > Asphyre International > Asphyre in Russian
Asphyre in Russian Discuss anything related to Asphyre in Russian language here.


 
 
Thread Tools Display Modes
  (#1) Old
Alex_RiP Alex_RiP is offline
Visitor
Alex_RiP is on a distinguished road
 
Posts: 1
Join Date: Jan 2011
Application.ProcessMessages и Windows 7 - 03-Jan-2011, 06:47

Беда имеет косвенное отношение к Асфиру (его таймер работает на OnIdle), но решать проблему всё равно придется.
Зависает приложение (при условии, что не установлена совместимость с XP), если запущено не под отладчиком и в течении 5 секунд не получает сообщений (снят фокус с окна, мыша над окном не перемещается).
Пока, что вариант решения выбран такой (на место MyIdle подставляется метод таймера):
Code:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
        procedure FormActivate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
  private
        { Private declarations }
        fDone : Boolean;
  public
        { Public declarations }
        procedure MyIdle;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// -----------------------------------------------------------------------------
procedure TForm1.FormActivate(Sender: TObject);
var
        Msg : TMsg;
begin
        if (fDone = False) then begin
                Exit;
        end;

        fDone := False;
        while (not fDone) do begin
                MyIdle();
                while PeekMessage(Msg,0,0,0,PM_REMOVE) do begin
                        TranslateMessage(Msg);
                        DispatchMessage(Msg);
                        if (Msg.Message = WM_QUIT) then begin
                                Application.Terminate;
                                fDone := True;
                                break;
                        end;
                end;
        end;
end;

// -----------------------------------------------------------------------------
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
        fDone := True;
end;

// -----------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
        fDone := True;
end;

// -----------------------------------------------------------------------------
procedure TForm1.MyIdle;
begin
        Caption := IntToStr(GetTickCount);
end;

end.
Однако, я очень плохо знаю механизмы работы ОС. Верно ли данное решение? Не приведет ли оно к каким либо проблемам?
Код проверялся на 2009 и 2010 дельфе. ОС - windows 7 64 HP (+получены репорты о зависаниях на висте).
Минимальный код приводящий к зависанию:
Code:
// -----------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
        Application.OnIdle := MyIdle;
end;

// -----------------------------------------------------------------------------
procedure TForm1.MyIdle(Sender: TObject; var Done: Boolean);
begin
        Done := False;
end;
------------------------------
Если кто-нибудь еще сражается, то мы в своё время просто стянули ProccessMessages из ХЕ и это полностью устранило проблему. Позднее уже была полная миграция на ХЕ.

Last edited by Alex_RiP; 06-Mar-2012 at 01:20. Reason: проблема устранена
  (#2) Old
undefo undefo is offline
Curious
undefo is on a distinguished road
 
Posts: 10
Join Date: Nov 2010
Location: Kazakhstan, Kostanay
Send a message via ICQ to undefo
05-Sep-2011, 06:59

Кстати, да!
Очень интересует этот же вопрос...
  (#3) Old
lifepower lifepower is offline
Developer
lifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud oflifepower has much to be proud of
 
lifepower's Avatar
 
Posts: 2,072
Join Date: Oct 2005
Location: Pointer = nil;
05-Sep-2011, 15:57

Quote:
Originally Posted by Alex_RiP View Post
Беда имеет косвенное отношение к Асфиру (его таймер работает на OnIdle), но решать проблему всё равно придется.
Зависает приложение (при условии, что не установлена совместимость с XP), если запущено не под отладчиком и в течении 5 секунд не получает сообщений (снят фокус с окна, мыша над окном не перемещается).
А можно выложить программу для проверки? У меня такого никогда не было, ни на Висте, ни на Win7.

При каких условиях это случается и на каких компьютерах?

Тем не менее, я бы не вставлял бесконечный цикл в FormActivate.
  (#4) Old
undefo undefo is offline
Curious
undefo is on a distinguished road
 
Posts: 10
Join Date: Nov 2010
Location: Kazakhstan, Kostanay
Send a message via ICQ to undefo
06-Sep-2011, 03:06

Вот, пожалуйста

Достаточно открыть поверх окна с игрой любое приложение в течение ~5сек.

Зависание происходит на Windows 7 x86 & x64. Если же включить режим совместимости с Windows XP, то всё работает идеально.
Attached Files
File Type: rar test.rar (2.91 MB, 98 views)
  (#5) Old
undefo undefo is offline
Curious
undefo is on a distinguished road
 
Posts: 10
Join Date: Nov 2010
Location: Kazakhstan, Kostanay
Send a message via ICQ to undefo
08-Sep-2011, 09:07

Т.к. я тоже не разбираюсь в архитектуре ОС, то сделал тупые "грабли" с автоматическим включением режима совместимости winxpsp3 и перезапуском приложения.

"Не айс", но другого выхода не вижу
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Delphi 2010 и Asphyre Sphinx DekaSoft Asphyre in Russian 2 25-Dec-2009 07:54
Asphyre и повторяющийся звук! KZMaxxx Asphyre in Russian 7 05-Sep-2009 08:20
Asphyre in windows mode: drawing issues when window dialog boxes GJPBoston Development 1 09-Feb-2008 15:58
Обрезка картинок и текста KZMaxxx Asphyre in Russian 2 22-Dec-2007 14:27
Что выбрать и как поставить... KZMaxxx Asphyre in Russian 8 21-Nov-2007 14:26



vBulletin® is copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
vBulletin Skin developed by: vBStyles.com
Copyright (c) 2000 - 2016 Afterwarp Development. All rights reserved.