From: Waldemar B. <wb...@sa...> - 2010-05-11 20:32:40
|
Hello! I have a GUI application which from time to time crashes. Buttons, textfield and other object disappear, but not the all. It's very strange because the application can work persistent few hours without problem but sometimes the problem happens few times in one hour. This is an application which dynamically creates many windows with database data - about 20-40 in one session. The window contains only textfields, buttons and labels, but there can by many of them (100-200 tetxfields sometimes more). All the objects can also have dynamically determined colors which depend on values of the textfields. Additionally icons are stored inside the application by using the module: use Win32::GUI::BitmapInline(); At last I should add that all the window is scaled along x and y axis independently. So many graphical operations... I wonder if it could be a leak memory which is similar to the "leak" which can be found in a demo application like Tutorial_Part1_hello1.pl demo. It can be seen when you open Task Manager and watch the amount of memory perl consumes. Even the simple mouse moving when the application is active shows that the memory rise up constantly. Is it problem with Win32::GUI? Another question is as follows. Has the small errors (warnings) meaning in the context of the crashes? I thing about for instance warning in counting the exprossion like substr($foo,3,4) when $foo has only length of 2. Usually I start the perl with the: #perl -W use warnings; use strict; Could it be proper to switch off the options? Ane comments and experience sharing is much appriciated. And is there similar problem in other GUI perl libraries? Waldemar |
From: Kevin M. <kej...@ho...> - 2010-05-11 23:39:48
|
Waldemar, One reason for your controls disappearing might be that they don't have unique names. If you create a control with the same name as an existing control, the previous control is destroyed. A possible solution could be to keep a counter of the number of controls created which could be used to create unique names, example: my $Counter = 1; foreach(1..10){ $win->AddTextfield -name => "Textfield${Counter}", ); $Counter++; } foreach(1..10){ $win->AddLabel( -name => "Label${Counter}", ); $Counter++; } __END__ Hope this helps, Kevin. _________________________________________________________________ Need a new place to live? Find it on Domain.com.au http://clk.atdmt.com/NMN/go/157631292/direct/01/ |
From: Kevin M. <kej...@ho...> - 2010-05-12 05:41:22
|
Waldemar, Do you mean when you application exits, because Win32::GUI generally takes care of the destruction of any windows on exit. Sometimes, however, you may receive an error along the lines of "Can't call method STORE on an undefined value...". In which case, you can just undef() your windows before you exit to suppress these messages. If you are needing to reuse windows, then hiding them instead of destroying them could be better, since there would probably be some overhead in creating a window each time it is needed. You would just have to remember to reset all the window's controls when the window is needed again. I know for programs I have written that use a lot of windows, there are a lot which are created, and then shown using DoModal(), in subroutines that are called from events, so they are automatically destroyed when the subroutine returns. I could probably improve performance by creating them beforehand, but I suppose it depends on the situation. I have also seen code where the windows are hidden after the Win32::GUI::Dialog() call, before the program exits. I am not sure if there is anything to be gained from this; again, it all comes down to personal preference. There's no functional difference between "Label${Counter}" and "Label$Counter", it's just that putting braces around the names of variables in strings prevents Perl from thinking that trailing alphanumeric characters are part of the variable name. For instance, if you had the string "$CounterLabel" instead, then Perl would look for a $CounterLabel variable. Check out the perldata manpage for more info. It's just a habit that I have gotten into to make variables in strings clearer. Kevin. _________________________________________________________________ New, Used, Demo, Dealer or Private? Find it at CarPoint.com.au http://clk.atdmt.com/NMN/go/206222968/direct/01/ |
From: Jeremy W. <jez...@ho...> - 2010-05-12 08:38:22
|
Hi, Dealing with your last question first. All GUI toolkits have "problems" and are prone to crashing when things go wrong internally. What version of Perl and Win32::GUI are you using? I couldn't see any leak with Tutorial_Part1_hello1.pl? Is your crash random? Or is it due to running out of memory? Does the application crash when you use the menu system, or shortly after? How are you changing the colors on the controls? Are you using the change method? If so, this is the cause of the leak, see the tracker item: http://sourceforge.net/tracker/?func=detail&aid=2864551&group_id=16572&atid=116572 I know it's a pain to do, but could you produce a minimal example that crashes and leaks? I'll take a look (feel free to email off list). Cheers, jez. > From: wb...@sa... > To: per...@li... > Date: Tue, 11 May 2010 21:32:26 +0200 > Subject: [perl-win32-gui-users] Problem with graphic application > > Hello! > > I have a GUI application which from time to time crashes. Buttons, textfield > and other object disappear, but not the all. It's very strange because the > application can work persistent few hours without problem but sometimes the > problem happens few times in one hour. This is an application which > dynamically creates many windows with database data - about 20-40 in one > session. The window contains only textfields, buttons and labels, but there can > by many of them (100-200 tetxfields sometimes more). All the objects can also > have dynamically determined colors which depend on values of the textfields. > Additionally icons are stored inside the application by using the module: > > use Win32::GUI::BitmapInline(); > > At last I should add that all the window is scaled along x and y axis > independently. So many graphical operations... > > > I wonder if it could be a leak memory which is similar to the "leak" which can > be found in a demo application like Tutorial_Part1_hello1.pl demo. It can be > seen when you open Task Manager and watch the amount of memory perl consumes. > Even the simple mouse moving when the application is active shows that the > memory rise up constantly. Is it problem with Win32::GUI? > > Another question is as follows. Has the small errors (warnings) meaning in the > context of the crashes? I thing about for instance warning in counting the > exprossion like substr($foo,3,4) when $foo has only length of 2. Usually I > start the perl with the: > > #perl -W > use warnings; > use strict; > > Could it be proper to switch off the options? > > Ane comments and experience sharing is much appriciated. And is there similar > problem in other GUI perl libraries? > > Waldemar > > ------------------------------------------------------------------------------ > > _______________________________________________ > Perl-Win32-GUI-Users mailing list > Per...@li... > https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users > http://perl-win32-gui.sourceforge.net/ _________________________________________________________________ http://clk.atdmt.com/UKM/go/197222280/direct/01/ Do you have a story that started on Hotmail? Tell us now |