回答編集履歴

2

daemonスレッドについて注釈を追加

2020/04/14 09:06

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 解決策: daemon=True オプションで、メインスレッドと同時に終了します。
5
+ 簡単な解決策: daemon=True オプションで、メインスレッドと同時に終了します。
6
6
 
7
7
 
8
8
 
@@ -11,6 +11,20 @@
11
11
  self.thread = threading.Thread(target=click_listen, daemon=True)
12
12
 
13
13
  ```
14
+
15
+
16
+
17
+ [公式doc スレッドベースの並列処理](https://docs.python.org/ja/3/library/threading.html)
18
+
19
+
20
+
21
+ (追記2)
22
+
23
+ 注意点は、強制終了に近いので、終了時に何らかの処理が必要な場合は daemonスレッドにはぜず、
24
+
25
+ Event 等を通じてスレッドを安全に終了する。
26
+
27
+
14
28
 
15
29
 
16
30
 

1

説明補足

2020/04/14 09:06

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -20,6 +20,10 @@
20
20
 
21
21
 
22
22
 
23
+ stopButtonClick内で
24
+
25
+
26
+
23
27
  - `listener.stop()` を呼び出す。クリック検出の停止。
24
28
 
25
29
  - `self.thread = None` (再スタートを出来るようにする為)
@@ -31,3 +35,11 @@
31
35
  グローバル変数にする、もしくは、click_listen関数はメソッドにして
32
36
 
33
37
  インスタンス変数経由でアクセスする。
38
+
39
+
40
+
41
+ 追記:
42
+
43
+ - click_listen() の `while (True):` は取り除きます
44
+
45
+ ストップした後にまた次のリスナが起動してしまう為。