Hi ! One customer bought a new PC with AMD Athlon 64 & XP . He said that my application hangs up at worktime . Most bad situations - closing mdichild window . And if close with mouse cursor on window "close" at right top of window . Pressing Esc - sometime works fine , sometimes hangs up . With others PCs application is working fine . Application is running on Win2000 server shared directory , RDD - CDX .
What you can say about that ?
BCC 5.5 , xHarbour from CVS , FiveWin 2.5 of 2004 year .
With best regards ! Rimantas .
AMD Athlon 64 & WinXP
AMD Athlon 64 & WinXP
Rimantas U.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Hello Antonio ! Sorry , but I can't to do demo . Of course , my mdichilds are related to my others functions . At first , in most of them I use browse ( Hernan's ) and then user close window , application is saving columns sizes and places of this browse for this user and windows coords . I have one a big class for my needs , where I'm openning mdichilds and browses , folders and browses in folders . My source of standard windows bValid looks that:Antonio Linares wrote: We use AMD 64 bits (3400+) and it works excellent with FWH, etc.
Do you have a demo of your app we may download to test it ?
Code: Select all
::oWnd:bValid := { || ( ::End(), .t. ) }
METHOD End() CLASS TMyBasic
local cCrg := ::cCargo
local n := m := z := 0
local oWnd
local lRest := .f.
local aCols := {}
if ::bEnd !=NIL // own bEnd codeblock if it's needful to do something before
eval( ::bEnd )
endif
if ::oWnd != NIL
if ::lEnv
if wind_save( ::cCargo, ::oWnd ) // saving windows coords
for n := 1 to len( ::aBrwID ) // array of browse objects
aCols := {}
for m := 1 to len( ::aHdrs[ n ] )
z := ascan( ::aHdrs[ n ], ::aColHdr[ n ][ m ] )
aadd( aCols, { m, z } )
next
wbrw_save( ::cCargo, ::aBrwID[ n ], ::oBrw[ n ], aCols ) // saving columns places and sizes for browse and user
if ::aOrdCnd[ n ] # NIL .and. ::aOrdCnd[ n, 1 ]
::BrwOrdRem( n ) // removing temporary index filess
endif
next
endif
endif
if IsZoomed( ::oWnd:hWnd ) == .t. .and. ::lFld
lRest := .t.
::oWnd:Hide()
::oWnd:Restore()
endif
::LstFcs()
else
MsgInf( "Can't detec window !", 2 )
endif
if ::bEndPst !=NIL
eval( ::bEndPst )
endif
::lEnd := .t.
oApp:OpWd( cCrg,, 2 ) // removing mdi child object from object repository .
if ::nWd == 1 // if i's mdichild ( it can be also dialog )
do while PostMessage( ::oWnd:hWnd, WM_CLOSE ) # 1
enddo
endif
Self := NIL
if lRest .and. len( wndMain():oWndClient:aWnd ) > 0
wndMain():oWndClient:PrevWindow()
wndMain():oWndClient:GetActive():Maximize()
endif
return( NIL )
With best regards ! Rimantas .
Rimantas U.
Hello again ! I did here some changes and that worked . I don't know why .
Simply I added MsgWait( ) function . Now it works OK . The interval of MsgWait() is very shortly - .01 of second . I decided to add this function , because if I check sources ( that ussually I'm doing with MsgInfo() ) , then all is working OK . So it comes an idea to the mind , that here it's needful something similar to time delay . Maybe you have some ideas , why this delay helped to me ?
With best regards ! Rimantas
Code: Select all
::oWnd:bValid := { || ( ::End(), .t. ) }
METHOD End() CLASS TMyBasic
local cCrg := ::cCargo
local n := m := z := 0
local oWnd
local aCols := {}
if ::bEnd !=NIL
eval( ::bEnd )
endif
if ::oWnd != NIL
if ::lEnv
MsgWait( "Please , one moment ... ",, .01 )
if wind_save( ::cCargo, ::oWnd ) // saving windows coords
for n := 1 to len( ::aBrwID ) // array of browse objects
aCols := {}
for m := 1 to len( ::aHdrs[ n ] )
z := ascan( ::aHdrs[ n ], ::aColHdr[ n ][ m ] )
aadd( aCols, { m, z } )
next
wbrw_save( ::cCargo, ::aBrwID[ n ], ::oBrw[ n ], aCols )
if ::aOrdCnd[ n ] # NIL .and. ::aOrdCnd[ n, 1 ]
::BrwOrdRem( n ) // removing temporary index filess
endif
next
endif
endif
::LstFcs()
else
MsgInf( "Can't detec window !", 2 )
endif
if ::bEndPst !=NIL
eval( ::bEndPst )
endif
::lEnd := .t.
if ::nWd == 1
do while PostMessage( ::oWnd:hWnd, WM_CLOSE ) # 1
enddo
endif
MsgWait( "Please , one moment ... ",, .01 )
oApp:OpWd( cCrg,, 2 )
Self := NIL
return( NIL )
With best regards ! Rimantas
Rimantas U.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Hello Antonio ! Can you advice , what function I can use instead MsgWait . I don't want to see that short "blink" of dissapering MsgWait() function .Antonio Linares wrote:
The AMD 64 is a very fast machine. Maybe it needs some time to peform some operations and the function call helped there.
Glad to know you solved it
With best regards !
Rimantas U.
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: