Bonjour,
j'aurais besoin de réaliser du multithreading dans une application qui réalise un gros calcul car celle-ci fige le temps du calcul, pour le reporter sur un autre coeur, mais je ne sais pas comment m'y prendre ?
merci de votre aide
Bonjour,
j'aurais besoin de réaliser du multithreading dans une application qui réalise un gros calcul car celle-ci fige le temps du calcul, pour le reporter sur un autre coeur, mais je ne sais pas comment m'y prendre ?
merci de votre aide
Je n'ai pas tout compris mais...
Normalement tout traitement long doit être réalisé dans un AsyncTask...
(ou dans un thread, mais plus complexe pour synchroniser avec l'application).
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
Sur pc prenons l'exemple d'un dual-core, tu as un thread principal qui se déroule sur le coeur principal (qui gère affichage, click...) et un second thread où j'effectue les calculs, mais sur Android comment ça se passe ?
De plus, il y a la gestion des accès concurrent avec lock() et unlock().
Exactement pareil... Je ne comprends pas la raison de la question en fait...
Qu'est ce qui te "semble" différent entre un PC et un smartphone ? D'autant que je ne vois pas ce que viens faire le "nombre de cores" ici...
Pour les accès "concurrents", en général, ils sont très limités. Le langage java offre une panoplie conséquente de fonctions de synchronisation ('synchronized' étant la plus courante, mais il y a aussi Object.wait() et Object.signal() ). Par contre, cela fait longtemps qu'on ne fait plus le lock/unlock /synchronized en programmation sauf dans de très rares cas... on préfère une approche évènementielle (surtout coté 'UI'):
Thread UI:
Démarre Thread "Calcul" en lui disant de passer l'évènement 'calcul fini' une fois terminé.
Thread Calcul:
Fait le calcul, et envoie l’évènement 'calcul fini' (avec les résultats du calcul).
Thead UI:
Reçoit l’évènement calcul fini, et récupère ainsi les résultats. En attendant, le thread UI peut processer tous les autres évènements d'interface.
Le framework d'Android propose une classe exactement pour cela: AsyncTask.
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
j'ai trouvé cet exemple
si je lance plusieurs fois traitementDesDonnees() ne lance-t-on pas plusieurs threads ?
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 private void traitementDesDonnees() { new Thread(new Runnable() { @Override public void run() { // Boucle de 1 a 10 for (int i = 0; i < 10; i++) { try { // Attends 500 millisecondes Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); }
Si c'est le cas, je voudrais qu'ils s’exécutent l'un après l'autre, merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager