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



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème de portage Linux
Conversation (Résolue) : Problème de portage Linux
09-02-2009 10:13:20  Problème de portage Linux #1
Arkhiall (Membre)
Inscrit le : 08-11-2007
Messages: 28
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour à tous,
J'avais à l'origine commencé à développer mon programme sous Windows.
Souhaitant le voir fonctionner sous Linux, j'ai recompilé le tout sous Ubuntu en utilisant les Autotools et ça marche impec. Seulement, j'ai un bug récurrent lors du lancement du thread qui n'apparaissait pas sous Windows et qui résulte en la fermeture de l'application...

Code:

ArkhTools: ../../src/xcb_lock.c :33 : _XCBUnlockDisplay:  L'assertion « xcb_get_request_sent(dpy->xcb->connection) == dpy->request » a échoué.
Abandon


ou encore

Code:

Gdk:ERROR:/build/buildd/gtk+2.0-2.14.4/gdk/gdkregion-generic.c:1086:miUnionNonO: assertion failed: (r->x1 < r->x2)
Abandon


J'ai essayé de débugger le tout avec dbg, mais je ne vois vraiment pas... et selon le messqage d'erreur, ca semble plus venir de wxWidgets non ?

Merci à ceux qui auraient une idée !

EDIT :
Encore un autre message d'erreur :

Code:

The program 'ArkhTools' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadIDChoice (invalid resource ID chosen for this connection)'.
  (Details: serial 99565 error_code 14 request_code 53 minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)
 


La backtrace :

Code:

#0  0x00007febd58affd5 in raise () from /lib/libc.so.6
#1  0x00007febd58b1b43 in abort () from /lib/libc.so.6
#2  0x00007febd58a8d49 in __assert_fail () from /lib/libc.so.6
#3  0x00007febd1f37701 in _XGetXCBBuffer () from /usr/lib/libX11.so.6
#4  0x00007febd1f385a2 in _XReply () from /usr/lib/libX11.so.6
#5  0x00007febd1f2bff3 in XSync () from /usr/lib/libX11.so.6
#6  0x00007febd4c2660e in gdk_flush () from /usr/lib/libgdk-x11-2.0.so.0
#7  0x00007febd6f73e2a in wxStatusBar::SetStatusText () from /usr/lib/libwx_gtk2u_core-2.8.so.0
#8  0x0000000000427e53 in atSimulator::Entry (this=0x1ebadf0) at atSim/atSimulator/atSimulator_main.cpp:22
#9  0x00007febd669ec0a in wxThreadInternal::PthreadStart () from /usr/lib/libwx_baseu-2.8.so.0
#10 0x00007febd5bf63ea in start_thread () from /lib/libpthread.so.0
#11 0x00007febd5963c6d in clone () from /lib/libc.so.6
#12 0x0000000000000000 in ?? ()
 

Dernière modification par Arkhiall (09-02-2009 10:25:58)

09-02-2009 11:09:49  Re: Problème de portage Linux #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

A première vue, je dirais qu'il s'agit d'un problème d'accès à la GUI depuis un thread secondaire.
Merci de confirmer :
- que tu utilises bien les threads
- que tu accèdes bien à la GUI depuis un thread secondaire

Si c'est le cas, montre un bout de code expliquant comment tu réalises cet accès.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
09-02-2009 13:03:58  Re: Problème de portage Linux #3
Arkhiall (Membre)
Inscrit le : 08-11-2007
Messages: 28
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,
j'utilise en effet bien un thread qui accède à la GUI. C'est en fait une "simulation", qui doit donc indiquer son avancement et mettre à jour dans la fenêtre principale les résultats.

Code Cpp:

 
class atSimulator : public wxThread
{
    public:
        atSimulator(atSim* _parent) : wxThread(wxTHREAD_DETACHED), parent(_parent) {}
        void* Entry();
        void stop() { nbSim = sim + 1; }
 
    private:
        void init();
        void computeAverageLosses();
        void computeCasesLosses(Sim &caseResult);
 
        /** blablabla... **/
};



Code Cpp:

void* atSimulator::Entry()
{
    wxString progress = _("Lancement de la simulation... ");
    ((wxFrame*)parent->GetGrandParent())->SetStatusText(progress, 1);
 
    /** blablabla... **/
 
    progress.clear();
    progress << _("Simulation terminée !");
    ((wxFrame*)parent->GetGrandParent())->SetStatusText(progress, 1);
 
    parent->endOfSim();
}


computeAverageLosses et computeCasesLosses sont appelées par le thread en cours d'exécution et appellent des fonctions de ma classe pointée par parent qui accèdent elles diretement à la GUI (modifications de labels, champs de texte grisés/dégrisés, etc...)

En espérant que je suis clair !

Merci de ta réponse ;)
09-02-2009 13:18:45  Re: Problème de portage Linux #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1383
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Essayes dans ce cas de passer par des événements personnalisés.

Cette méthode devrait suffire puisque tu n'as que du texte ou des entiers (valeur de progressbar) à modifier.

Sinon, il faut utiliser wxMutexGuiEnter() et wxMutexGuiLeave() pour accéder à des éléments de la GUI (donc du thread principal) depuis un thread secondaire.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
09-02-2009 13:47:38  Re: Problème de portage Linux #5
Arkhiall (Membre)
Inscrit le : 08-11-2007
Messages: 28
Snippets: 0
Tutoriels: 0
Hors ligne
Merci beaucoup,
plus aucun problème en utilisant wxMutexGuiEnter() et Leave !
Je ne savais pas qu'il fallait locker la Gui. C'est bizarre qu'il n'y ait pas ce problème sous Windows...
09-02-2009 15:30:26  Re: Problème de portage Linux #6
cfdev (Membre)
Lieu: Alpes de Haut Provence
Inscrit le : 08-11-2007
Messages: 127
Snippets: 4
Tutoriels: 0
Site web
Hors ligne
Je ne savais pas qu'il fallait locker la Gui. C'est bizarre qu'il n'y ait pas ce problème sous Windows...
je n'ai pas encore utilisé les threads sous wxWidgets(sous qt une fois) mais c'est normal de bloquer l'interface graphique qui est un processus à part, donc pour éviter que les 2 process accèdent à un même truc en même temps!

Aprés sous windows...surement qu'il aurai eu des bugs aléatoires!

++

GNU Linux Power !
Slacker
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Problème de portage Linux