Ecoute je te fais un pov' exemple ce soir et tu n'auras qu'a verifier les diffs
des programmes pour voir ou est la difference ...
Bulbo![]()
Ecoute je te fais un pov' exemple ce soir et tu n'auras qu'a verifier les diffs
des programmes pour voir ou est la difference ...
Bulbo![]()
Voici un exemple qui cree un fichier toto.txt dans un thread (un fichier random de 1000 lignes)
Dans le thread principal je me bloque durant l'ecriture et ensuite je compte les lignes du fichier (comme ca je suis sur que l'ecriture dans le fichier est bien termine)
Il fonctionne bien et c'est exactement le code que je t'ai file precedemment ..
si ca marche pas dans ton code n'essaie de chipoter met le code que je t'ai file tel quel et essaye de comprendre pourquoi ca marche ...
Bonne chance,
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 import java.io.*; import java.util.Random; public class DummyTest { private String lock = new String("lock"); public DummyTest() throws Exception { Thread task = new Thread() { public void run() { // on cree un fichier aleatoire mais de 1000 lignes PrintWriter writer = null; try { writer = new PrintWriter(new FileOutputStream("toto.txt"), true); Random rd = new Random(); int size = 0; int ind2 = 0; for (int index = 0; index < 1000; index++) { size = rd.nextInt(81); for (ind2 = 0; ind2 < size; ind2++) { writer.print((char) (rd.nextInt(26) + 'a')); } writer.print('\n'); writer.flush(); } System.out.println("Ecrit: 1000"); } catch (Exception e) { e.printStackTrace(); } finally { writer.close(); debloquer(); } } }; task.start(); bloquer(); countLines(); } private void countLines() throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("toto.txt"))); String line = null; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Lu : " + count); } public void bloquer() { synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { } } } public void debloquer() { synchronized (lock) { lock.notifyAll(); } } public static void main(String[] argv) { try { new DummyTest(); } catch (Exception e) { e.printStackTrace(); } } }
Bulbo![]()
Avant d'essayer ton code j'ai essayé une autre petite chose
une foi que mon thread a fini de lire sur le socket, il lance une fonction du Client qui permet d'ouvrir le fichier
Or on arrve jamais a ce point
sur mess bout de code qui sont au dessus, ca se situe a l'endoirt monPere.deblocage();
ce point n'est jamais atteint, c'est pour ca qu'il reste bloqué...
Qu'est ce qui empecherai que le run() d'un thread aille jusqu'a la fin...?
bon il ne sort pas de sa boucle while...ou alor il en sort mais il ne finit pa son run()....au choix mai la 2eme solution ne me parai pa possible
Bon et bien le probleme etai simple
mon thread ecoute sur le socket tant que le flux ne se termine pas
je pensai que une foi que tt les données etait transférée ca reviendrait a ce que le flux soit terminé mai en fait pas du tou... donc le thread est toujours en train de lire sur le flux d'entree et donc il ne peut pas sortir de sa boucle While
donc du coté serveur je ferme le flux ce qui signale au thread que le flux est terminé et que je peu sortir de mon while
cette partie march en tou cas
Merci bien ^^![]()
![]()
![]()
Partager