Bonjour,

je suis en train d'écrire ma première application avec WxWidgets que je trouve vraiment sympa et plus simple à mon gout que d'autre lib du même genre...

Je suis confronté à un problème qui m'empêche de dormir tranquillement, peut être que quelqu'un ici pourra m'aider...

POur éviter de faire un copier/coller de toutes mes lignes de codes qui servirait pas à granc chose, j'ai reproduit le problème en plus court :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
#include <wx/wx.h>
 
 
class 
Exempleapp : public wxApp
{
	public:
		virtual bool OnInit();
};
 
class 
ExempleFrame : public wxFrame
{
	public:
		ExempleFrame( const wxString& title, const wxPoint& pos, const wxSize& pos );
		void OnQuit( wxCommandEvent& event );
		void OnAbout( wxCommandEvent& event );
		void OnStart( wxCommandEvent& event );
		void OnTimer(wxTimerEvent&);
 
	private:
		wxTextCtrl *mlTextCtrl;
		wxTimer *MonTimer;
 
		DECLARE_EVENT_TABLE()
};
 
enum
{
	Menu_File_Quit = 100,
	Menu_File_About,
	Menu_File_Start,
	Id_TextEdit,
	Id_Timer
};
 
 
 
BEGIN_EVENT_TABLE( ExempleFrame, wxFrame )
	EVT_MENU( Menu_File_Quit, ExempleFrame::OnQuit )
	EVT_MENU( Menu_File_About, ExempleFrame::OnAbout )
	EVT_MENU( Menu_File_Start, ExempleFrame::OnStart )
	EVT_TIMER(Id_Timer, ExempleFrame::OnTimer)
END_EVENT_TABLE()
 
IMPLEMENT_APP(Exempleapp)
 
 
bool 
Exempleapp::OnInit()
{
	ExempleFrame *frame = new ExempleFrame( wxT( "Hello World" ), wxPoint(50,50), wxSize(450,340) );
 
	frame->Show(TRUE);
	SetTopWindow(frame);
	return TRUE;
} 
 
ExempleFrame::ExempleFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
	: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
	wxMenu *menuFile = new wxMenu;
 
	menuFile->Append( Menu_File_Start, wxT( "Start !" ) );
	menuFile->AppendSeparator();
	menuFile->Append( Menu_File_About, wxT( "&About..." ) );
	menuFile->AppendSeparator();
	menuFile->Append( Menu_File_Quit, wxT( "E&xit" ) );
 
	wxMenuBar *menuBar = new wxMenuBar;
	menuBar->Append( menuFile, wxT( "&File" ) );
 
	SetMenuBar( menuBar );
 
	CreateStatusBar();
	SetStatusText( wxT( "Welcome to Kdevelop wxWidgets app!" ) );
 
	mlTextCtrl = new wxTextCtrl(this, Id_TextEdit, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);// wxTE_MULTILINE | wxTE_CHARWRAP | wxTE_READONLY);
 
	MonTimer = new wxTimer(this,Id_Timer);
}
 
void
ExempleFrame::OnTimer(wxTimerEvent& event) {
	mlTextCtrl->AppendText(wxT("Test"));
}
 
void 
ExempleFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
{
	Close(TRUE);
}
 
void 
ExempleFrame::OnStart( wxCommandEvent& WXUNUSED( event ) ) 
{
    	MonTimer->Start(100);
}
 
 
void 
ExempleFrame::OnAbout( wxCommandEvent& WXUNUSED( event ) )
{
	wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
			wxT( "About Hello World" ), wxOK | wxICON_INFORMATION, this );
}
Voilà, ce code est tout bête, il affiche une fenetre avec un widget Text permettant d'afficher du texte, un timer claque toutes les 100ms et permet de rajouter du texte, faites tourner cette exemple pendant 2-3 minutes et vous allez constatez au bout d'un moment un fort ralentissement de l'appli, si vous esayez de la redimenssionnez, elle ne répond qu'après un certain temps, en gros, on dirait que lorsque le contrôle wxTextCtrl se rempli, il ne rend plus la main au reste...
Vous pouvez aussi changer la valeur du timer et mettre par exemple 200ms, le problème apparaitra aussi mais plus tard...

Si quelqu'un à une idée pour expliquer ce phénomène ou simplement pour le contrer, en fait, dans mon appli, j'ai juste besoin de venir d'ajouter en permanence, très souvent du texte à la suite dans le champ texte.

Dernière précision, je suis actuellement sous Linux, j'ai essayé sous Windows XP Pro, ça me fait pareil.

Merci d'avance à vous !