wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :598

Membres en ligne : 0
Invités en ligne : 3
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» wxGetApp().Yield()
Conversation : wxGetApp().Yield()
08-09-2009 17:21:00  wxGetApp().Yield() #1
volfoni54 (Membre)
Lieu: Volfoni
Inscrit le : 14-09-2008
Messages: 15
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour à tous,

Je me demande quelle est la meilleure façon d'utiliser wxProgressBar avec wxExecute :

J'appelle un programme externe qui met un certain temps à s'éxecuter et en "parallèle", je souhaite montrer la progression avec un object de type wxProgressBar.

Je suis allé voir le snippet sur wxExecute et je suis bloqué par la ligne wxGetApp.Yield().

Qui peut m'expliquer à quoi sert cette méthode et si on peut s'en passer car même en incluant le fichier qui contient "IMPLEMENT_APP", cette méthode n'est pas connue.

Merci de votre aide,

Volfoni54
09-09-2009 15:14:36  Re: wxGetApp().Yield() #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
Salut.

Le wxApp::Yield sert à permettre à l'application de traiter les messages en attente (rafraichissement de l'interface, ...).

Par exemple, si ton prog a un gros job à traiter, et que tu veux permettre à l'utilisateur de l'annuler (avec un bouton), il faut laisser au système le temps de prendre en compte le clic sur le bouton correspondant.

Ça permet aussi à ton application de ne pas prendre toutes les ressources du processeur.
Par exemple, pour le snippet dont tu parles, voici ce qui se passe :
- On lance l'exécution du programme externe
- On démarre une boucle qui vérifie si il y a quelque chose sur le flux de sortie de ce programme afin de le placer dans un wxString
- La boucle tourne tant que le programme tourne.

Tu imagines aisément que la boucle, sans le wxApp::Yield, va prendre plus de ressources que le programme lui-même.

Pour que wxGetApp() soit "visible", il placer la macro DECLARE_APP(appClass) après la déclaration de la classe d'application.

Sinon, si tu ne veux pas mettre cette macro, tu dois pouvoir passer par wxTheApp->Yield().

Plus d'infos ici

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
20-08-2010 17:07:54  Re: wxGetApp().Yield() #3
secret055 (Nouveau membre)
Inscrit le : 09-08-2009
Messages: 9
Snippets: 0
Tutoriels: 0
Hors ligne
Salut à toutes et à tous,
Xaviou a écrit:
Pour que wxGetApp() soit "visible", il placer la macro DECLARE_APP(appClass) après la déclaration de la classe d'application.
J'ai un problème avec wxGetApp(),mon programme ne la reconnait pas.Et j'ai placé la macro DECLARE_APP(appClass)après la déclaration de la classe d'application(dans  MyApp.h).
Et Quand j'appelle wxGetApp()dans MainWindow.cpp il me dit qu'elle n'est pas déclarée.
Merci.

Dernière modification par secret055 (20-08-2010 17:08:33)

20-08-2010 17:59:55  Re: wxGetApp().Yield() #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
Salut.

Tu as bien ajouté l'include du header de ta classe d'application ?

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
20-08-2010 20:39:04  Re: wxGetApp().Yield() #5
secret055 (Nouveau membre)
Inscrit le : 09-08-2009
Messages: 9
Snippets: 0
Tutoriels: 0
Hors ligne
Merci pour l'aide,j'ai inclus "MyApp.h" dans le MainFrame.h et ça marche bien.
Un autre problème:
Ce petit bout de code:

Code Cpp:

 
#if wxUSE_LIBJPEG
    wxImage::AddHandler( new wxJPEGHandler );
#endif
 

me donne l'erreur:

Code:

 
file         line    message
imagjpeg.cpp|       |undefined reference to `jpeg_resync_to_restart'|
imagjpeg.cpp|       |undefined reference to `jpeg_std_error'|
imagjpeg.cpp|       |undefined reference to `jpeg_destroy_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_CreateDecompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_read_header'|
imagjpeg.cpp|       |undefined reference to `jpeg_start_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_finish_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_destroy_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_read_scanlines'|
imagjpeg.cpp|       |undefined reference to `jpeg_finish_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_destroy_decompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_std_error'|
imagjpeg.cpp|       |undefined reference to `jpeg_destroy_compress'|
imagjpeg.cpp|       |undefined reference to `jpeg_CreateCompress'|
imagjpeg.cpp|       |undefined reference to `jpeg_set_defaults'|
imagjpeg.cpp|       |undefined reference to `jpeg_start_compress'|
imagjpeg.cpp|       |undefined reference to `jpeg_write_scanlines'|
imagjpeg.cpp|       |undefined reference to `jpeg_finish_compress'|
imagjpeg.cpp|       |undefined reference to `jpeg_destroy_compress'|
imagjpeg.cpp|           |undefined reference to `jpeg_set_quality'|
||=== Build finished: 20 errors, 0 warnings ===|
 

A votre avis qu'est-ce que ça signifie ?

Dernière modification par secret055 (21-08-2010 02:54:29)

21-08-2010 09:43:15  Re: wxGetApp().Yield() #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
Apparemment, il te manque une lib lors de la compilation (et plus précisément lors du linkage).

Quelles sont les options wxWidgets que tu utilises ?
- Ansi / Unicode
- Statique / Dynamique
- Multi-libs / Monolithique
- Debug / Release

Edit : En fait, ça n'a pas grand importance. Je dirais juste que tu utilises les libs statiques.
Il faut que tu ajoutes la lib "libwxjpeg.a" dans les options du linker (ou "wxjpeg.lib") si tu est sous Visual C++).

@+
Xav'

Dernière modification par Xaviou (21-08-2010 09:45:12)


Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
21-08-2010 13:49:24  Re: wxGetApp().Yield() #7
secret055 (Nouveau membre)
Inscrit le : 09-08-2009
Messages: 9
Snippets: 0
Tutoriels: 0
Hors ligne
J'utilise Unicode/Statique/Multi-libs/debug et release.
21-08-2010 15:18:34  Re: wxGetApp().Yield() #8
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne
Donc, il faut ajouter la lib "libwxjpeg.a" pour la configuration "Release" et "libwxjpegd.a" pour la configuration "Debug" (seulement si tes libs ont été compilées avec l'option "__WXDEBUG__" ou quelque chose dans ce genre).

Si tu utilises Visual C++, il faut remplacer les noms des libs ci-dessus par respectivement "wxjpeg.lib" et "wxjpegd.lib".

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
22-08-2010 01:13:00  Re: wxGetApp().Yield() #9
secret055 (Nouveau membre)
Inscrit le : 09-08-2009
Messages: 9
Snippets: 0
Tutoriels: 0
Hors ligne
Merci,c'est fait et ça marche.
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» wxGetApp().Yield()