Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Threads sous Windows/Linux [ Linux / Autre ] (raananb)

jeudi 26 juin 2008 à 23:48:26 | Threads sous Windows/Linux

raananb

L'extrait de code ci-après (développé avec wxWidgets en C++) traite une série de fichiers : pour chaque fichier il affiche le nom dans un label, une image est affichée si nécessaire, puis lance un thread et se met en attente pendant que le thread traite le fichier. Au retour, le nom du fichier s'inscrit dans une listbox et une barre de progression se met à jour.

Le thread est utilisé de manière à permettre d'interrompre la boucle par un clique sur un bouton, qui positionne la valeur 'InterruptTransfer'.

Ce code fonctionne sous Windows (XP, Vista Home) sans problèmes (compilé avec VCExpress 2008).

Sous Linux (GCC, GTK+2, Ubuntu 8.04), le label n'est jamais affiché et la listbox ne s'affiche qu'une fois la boucle terminée, avec toutes les entrées, au lieu de se remplir au fur et à mesure. En revanche, l'image et la barre de prograssion s'affichent.

J'aimerais comprendre pourquoi le code ne fonctionne pas sous Linux, et quelle est la solution.

Merci d'avance.

Le code:
 
  dir.GetFirst(&fileName,wxT("*.*"),wxDIR_FILES);

  do
  { // Traiter un fichier
    ProcessedFiles++;
    message.Clear();
    message.Append(fileName);
    label_PictureName->SetLabel(message);
 
    Orientation = GetPicOrientation(SourceFolder + wxFILE_SEP_PATH + fileName);
    if (Orientation == 3 || Orientation == 6 || Orientation == 8)
    {
      RotatedIcon->Show();
    }

    Update();

    CopyPicturesThread*  APThread1 = new CopyPicturesThread(this);  // thread à fin automatique
    if (APThread1->Create() != wxTHREAD_NO_ERROR)
    {
        return -1;
    }

    APThread1->Run();
    APThread1->Wait();

    lb_Copied->Insert(fileName,0); // en tête de la liste

    RotatedIcon->Hide();

    Update();

    progb_Transfer->SetValue(ProcessedFiles);

    fileName.Clear();

    dir.GetNext(&fileName);

  } while (!fileName.IsEmpty() && !InterruptTransfer);

vendredi 27 juin 2008 à 17:40:21 | Re : Threads sous Windows/Linux

luhtor

C'est bizzare ton code. Quand on veut faire un système de thread, on utilise des événements, pas une boucle bloquante. Je vois pas l'intéret du thread puisque tu l'attends dans le thread principal...

vendredi 27 juin 2008 à 18:14:24 | Re : Threads sous Windows/Linux

raananb

Merci pour le message.

Il ne s'agissait pas d'un système de thread, seulement d'un mécanisme simple qui permet de cliquer sur un bouton "Stop" pour interrompre la boucle. Autrement le thread n'apporte rien.

D'ailleurs, j'ai eu l'information pourquoi ça marche sous Windows et pas sous Linux : Linux bloque les messages UI pendant l'attent de la fin du thread alors que Windows lance une boucle d'écoute dans le Wait(), ce qui permet d'intercepter des message comme le click du bouton "Stop".



Cette discussion est classé dans : fichier, code, filename, linux, thread


Répondre à ce message

Sujets en rapport avec ce message

écriture dans un fichier [ par coockiesch ] Bonjour, je créé un petit exe qui doit écrire dans un fichier avec le code suivant : //filename est le chemin d'accèsFileStream *fs = new FileStream(f Installer GTK sous linux [ par neodelphi ] Bonjour tout le monde ! Je me suis mis recement à code sous linux. Je'utiliser donc g++ a présent au lieu de visual studio. Je voulais apprendre a me Nom de fichier de sortie dynamique [ par saturne_1606 ] Bonjours a tous!Voila ma fonction :void creer_carnet_vide( ){ string nom_carnet; cout cin >&gt Question sur Thread dans mon serveur multithread [ par Nixeus ] Bonjour a tous !J'ai récupérer un code source d' un serveur multithread multi client, en mode console.J'ai repris les classes et j'ai porté ce program lire une ligne dans un fichier txt et extraire les champs entre ; [ par drcmomo ] Bonjour!!je vous en prie aidez moi svp!!j'ecris ce code qui permet de lire un fichier txt, apres l'ouverture je dois lire une ligne et extraire les do pthread sous Linux ... Ouiiiin... [ par Defaite ] Bonjour à tous.Je suis actuellement sous WinXP et Ubuntu 6.10 et j'utilise Code::blocks pour developper un programme multi-threads. Ce programme march Malloc et mémoire affectée [ par Chop_chop ] Bonjour,J'ai un petit soucis quant à l'allocation de mémoire pour un char* avec l'utilisation de malloc.Voici mon code (bien allégé) :[CODE] char *fic probleme d'ouverture de fichier [ par totoscill ] Bonjour,j'aimerai ouvrir un fichier afin de lire des infos inclus dans celui ci mais mon programme n'arrive pas à l'ouvrir.Voici mon code:#include<fon completion de code avec kevelop [ par lilington ] salut tout le mondetoujours dans ma migration progressive vers linux (fedora 5) j'ai commencer un peu avec les sockets. cependant comme avec ms visual récupération d'un fichier dans un tableau [ par dgac ] Bonjour j'ai essayé le code suivant[CODE] #include&lt


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.