J'essai de trouver une méthode propre pour redemarrer un thread.
(dans le cas présent je lance un autre thread pour attendre le bon moment avant de le relancer)
Je ne pense pas etre le premier a avoir eu probleme similaire, comment avez vous imbriquez vos boucles? drapeaux?
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
100
101
102
103 package jsl.database.atome; import javax.swing.event.EventListenerList; import jsl.database.atome.event.RefreshEventListener; public class Refreshor extends Thread { private EventListenerList listeners = new EventListenerList(); private long interval = 10000; private boolean actif = false; private boolean encours = false; public Refreshor( RefreshEventListener ref ){ addRefreshEventListener(ref); setPriority(Thread.MIN_PRIORITY); start(); } public void setActif( boolean go ){ actif = go; Thread t = new Thread(){ public void run(){ while ( !encours && actif ){ try{ forceRestart(); sleep(1000); } catch( Exception e ){ e.printStackTrace(); } } } }; t.start(); } public void setInterval( long i ){ interval = i; } public boolean isActif(){ return actif; } private void forceRestart(){ try{ if( !isAlive() && !isInterrupted() ){ run(); } } catch( Exception e ){ e.printStackTrace(); } } public void run(){ encours = true; while ( actif ){ try{ sleep(interval); if( actif ) fireRefreshEvent(); } catch( Exception e ){ e.printStackTrace(); } } encours = false; } // ////////////////////////////////////////////// public void addRefreshEventListener( RefreshEventListener ref ){ listeners.add(RefreshEventListener.class, ref); } public void removeRefreshEventListener( RefreshEventListener ref ){ listeners.remove(RefreshEventListener.class, ref); } public RefreshEventListener[] getRefreshEventListeners(){ return listeners.getListeners(RefreshEventListener.class); } private void fireRefreshEvent(){ for( RefreshEventListener listener : getRefreshEventListeners() ){ listener.refresh(); } } }
Partager