teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

文章の修正

2021/01/30 12:08

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -26,10 +26,9 @@
26
26
  GUIのクリックイベントや描画等は、
27
27
  メインスレッドのイベントループ `app.exec_()` 内で行われます。
28
28
 
29
- その上で、問題点:
29
+ その上で、解決策と問題点:
30
30
 
31
-
32
31
  - スレッド間のデータの受け渡しには signal/slot を使います。
32
+ - 但し、QThread を継承した利用方法では、スレッド間のシグナル&スロットの実行に制限があります。
33
33
  - QThread 間でsignal/slot を処理するイベントループを動かすためには、
34
-  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
34
+  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
35
-  QThread を継承した利用方法では、スレッド間のシグナル&スロットの実行に制限があります。

3

文章修正

2021/01/30 12:08

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ```
20
20
 
21
- スレッドを跨いで UI に入力された値等を参照するのは、
21
+ スレッドを跨いで UI に入力された変化する値等を参照するのは、
22
22
  マルチスレッドにおいては安全な操作では有りません。
23
23
 
24
24
  前提として、
@@ -28,9 +28,8 @@
28
28
 
29
29
  その上で、問題点:
30
30
 
31
- QThread を継承した利用方法では、
32
- スレッド間のシグナル&スロットの実行に制限があります。
33
31
 
34
32
  - スレッド間のデータの受け渡しには signal/slot を使います。
35
33
  - QThread 間でsignal/slot を処理するイベントループを動かすためには、
36
-  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
34
+  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
35
+  QThread を継承した利用方法では、スレッド間のシグナル&スロットの実行に制限があります。

2

コード例追記

2021/01/30 12:05

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -1,10 +1,25 @@
1
1
  > class AK003で定義した変数を使いたい
2
2
 
3
3
  変数のスコープの問題だけなら、
4
- 別スレッドで実行される関数に引数で渡すことはできますが、
4
+ 別スレッドで実行される関数に引数で渡すことはできますが、(コード例追記)
5
5
 
6
+ ```python
7
+
8
+ def click_execute(self):
9
+ self.process_code_text = Process_code_text_class(self) # (1) AK003()のインスタンスを渡す
10
+ self.process_code_text.start()
11
+
12
+ #コード実行用サブクラス
13
+ class Process_code_text_class(QThread):
14
+ def __init__(self,parent=None):
15
+ super(Process_code_text_class, self).__init__(parent)
16
+
17
+ self.ak003 = parent # (2)
18
+
19
+ ```
20
+
6
21
  スレッドを跨いで UI に入力された値等を参照するのは、
7
- 安全な操作では有りません。
22
+ マルチスレッドにおいては安全な操作では有りません。
8
23
 
9
24
  前提として、
10
25
  GUI の生成は別スレッドではなく、全てメインスレッドで行ってください。

1

文章の修正

2021/01/30 12:02

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,9 +18,4 @@
18
18
 
19
19
  - スレッド間のデータの受け渡しには signal/slot を使います。
20
20
  - QThread 間でsignal/slot を処理するイベントループを動かすためには、
21
-  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
21
+  QThread を継承するのではなく、**moveToThread** を使った QThread の利用方法を調べてみてください。
22
-
23
- ----
24
-
25
- 文章よりもコードで説明したほうがわかりやすいと思うので、
26
- 後でコードで説明します。