J'essais d'apprendre à utiliser les thread en faisant tourner 2 algorithme de "trie" en parallèle (Juste à titre indicatif bien sur, c'est un exercice que je me donne). Mais bien que mes fonctions soit bien static etc et...(J'ai déjà regarder sur quelques forum). J'ai toujours cette erreur :
std::tuple<std::vector<int,std::allocator<int>> (__cdecl *)(sf::RenderWindow &,std::vector<int,std::allocator<int>>),sf::RenderWindow,std::vector<int,std::allocator<int>>>::tuple' : aucune fonction surchargée ne nécessite 3 arguments
Et j'ai beau la lire dans tout les sens je n'y comprend rien :/ Voici le code :
Et on peut tout à fait passer à un thread une fonction membre non static, il y aurait juste un paramètre supplémentaire à utiliser. Si BubbleSort::sortThread n'était pas static, ça donnerait :
Merci ! C'est que c'est un peu compliqué les thread ^^'. Petite question technique au passage tant qu'à faire : Est-ce que les "threads" sont géré de manière autonome sur le hardware ? Dans le sens ou si j'ai plusieurs thread est ce qu'il seront bien répartit selon les cœurs et le GPU ou je dois me creuser la tête ?
Quand tu codes un programme lambda, celui-ci s'exécutera a priori dans l'espace dit utilisateur de l'OS (sauf si tu codes le kernel d'un OS...). En fait, ton std::thread lance une requête, appelée appel système, au kernel de l'OS. C'est le scheduler ou ordonnanceur qui fait le travail de commutation (ce que tu appelles "gestion autonome sur le hardware"), et le scheduler est interne au kernel de l'OS. Donc tu ne peux pas y accéder. Heureusement !
Quelques liens pour mieux comprendre comment ça fonctionne, et t'orienter vers des notions que tu pourras approfondir :
Il faut bien comprendre que si tu as l'illusion que ton thread tourne tout seul sur un cœur, en fait un cœur (CPU) est constamment en train de changer de tâche, que ce soit un thread ou un processus. Ce changement, très rapide pour nous humain, nous donne cette impression que l'ordinateur fait plusieurs choses à la fois : lire une trame d'une vidéo, rafraichir l'écran, lire le son, etc. Or, un cœur ne peut exécuter qu'une seule chose à la fois. Tout ce qu'il fait est fait de façon séquentielle. Comme il parvient à tout faire, successivement, en l'espace de quelques millisecondes, à notre échelle c'est imperceptible.
Je parle bien pour un seul cœur. Si le CPU entier contient plusieurs cœurs, ils peuvent effectivement, à un instant t, faire différentes choses. Chacun fonctionne par contre par commutation de tâche comme décrit précédemment.
Enfin, un thread ou un processus ne s'exécute jamais sur GPU.
Merci encore ! Je me renseignerais pour savoir comment optimiser un programme, j'aimerais utiliser du GPU aussi ^^, bref mon problème étant résolu je remet à jour le Post
Erreur avec les threads
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.