質問編集履歴
5
質問内容を追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -104,4 +104,9 @@
|
|
104
104
|
▼2のvar_dump // 既に削除されたようなエラーメッセージ
|
105
105
|
Fatal error: Uncaught RuntimeException: pthreads detected an attempt to connect to an object which has already been destroyed in /var/www/html/main.php on line 7
|
106
106
|
*/
|
107
|
-
```
|
107
|
+
```
|
108
|
+
|
109
|
+
|
110
|
+
#質問追記
|
111
|
+
「そもそもThreadから配列を返すなんて処理は、普通(仕事)では書かないよ」的な意見でもぜひください。
|
112
|
+
私は趣味でプログラムしているので、そういう最前線の言葉が凄い貴重です。
|
4
追加でコードを掲載しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -56,4 +56,52 @@
|
|
56
56
|
```
|
57
57
|
|
58
58
|
#
|
59
|
-
スレッドで配列を返す事が不可能なら、しぶしぶjsonで返そうかと考えております(T_T)
|
59
|
+
スレッドで配列を返す事が不可能なら、しぶしぶjsonで返そうかと考えております(T_T)
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
# 追記: プロパティに格納しようとしたNGだったソースを掲載します。
|
64
|
+
```php
|
65
|
+
<?php
|
66
|
+
|
67
|
+
$MyThread = new MyThread;
|
68
|
+
$MyThread->start();
|
69
|
+
$MyThread->join();
|
70
|
+
|
71
|
+
//1
|
72
|
+
var_dump($MyThread);
|
73
|
+
//2
|
74
|
+
var_dump($MyThread->data); //NG
|
75
|
+
|
76
|
+
class MyThread extends Thread
|
77
|
+
{
|
78
|
+
public $data;
|
79
|
+
|
80
|
+
public function __construct()
|
81
|
+
{
|
82
|
+
//処理なし
|
83
|
+
}
|
84
|
+
|
85
|
+
public function run()
|
86
|
+
{
|
87
|
+
//この配列を親スレッドで使いたい
|
88
|
+
$array = array('data1', 'data2');
|
89
|
+
|
90
|
+
|
91
|
+
//プロパティに格納 → NG
|
92
|
+
$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->dataは既に破棄されていて、アクセス出来ない。
|
93
|
+
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
|
98
|
+
/* 出力結果
|
99
|
+
▼1のvar_dump //プロパティdataは含まれていない。
|
100
|
+
/var/www/html/Arbitrage_ROOT_PATH/thread_array.php:6:
|
101
|
+
class MyThread#1 (0) {
|
102
|
+
}
|
103
|
+
|
104
|
+
▼2のvar_dump // 既に削除されたようなエラーメッセージ
|
105
|
+
Fatal error: Uncaught RuntimeException: pthreads detected an attempt to connect to an object which has already been destroyed in /var/www/html/main.php on line 7
|
106
|
+
*/
|
107
|
+
```
|
3
「グローバル変数に格納」出来るかテストした旨を追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
子スレッド内で作った配列を、親スレッドで使いたいと考えております。
|
6
6
|
|
7
7
|
尚、速度を重視しているため、
|
8
|
-
下記の
|
8
|
+
下記の受け渡し方法は、出来るだけ行いたくないと考えております。
|
9
9
|
|
10
10
|
・DBに保存
|
11
|
-
・テキストファイル
|
11
|
+
・テキストファイルに書き出し
|
12
|
-
・jsonにして
|
12
|
+
・json(string)にして返す
|
13
13
|
|
14
14
|
|
15
15
|
# 試したソース
|
@@ -43,6 +43,9 @@
|
|
43
43
|
//セッションに格納 → NG
|
44
44
|
//$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
|
45
45
|
|
46
|
+
//グローバル変数に格納 → NG
|
47
|
+
//$GLOBALS['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
|
48
|
+
|
46
49
|
//json_encodeしてstringにする → OK
|
47
50
|
//$this->data = json_encode($array); //もちろんこれは出来たのですが、$arrayは実際は大きいデータなので、json_encodeする時間が惜しいんです。
|
48
51
|
|
2
変数名を訂正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -38,10 +38,10 @@
|
|
38
38
|
//以下、試したこと
|
39
39
|
|
40
40
|
//プロパティに格納 → NG
|
41
|
-
//$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->
|
41
|
+
//$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->dataは既に破棄されていて、アクセス出来ない。
|
42
42
|
|
43
43
|
//セッションに格納 → NG
|
44
|
-
//$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていて
|
44
|
+
//$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていてアクセス出来ない。
|
45
45
|
|
46
46
|
//json_encodeしてstringにする → OK
|
47
47
|
//$this->data = json_encode($array); //もちろんこれは出来たのですが、$arrayは実際は大きいデータなので、json_encodeする時間が惜しいんです。
|
1
変数名が誤っていたため変更しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
//以下、試したこと
|
39
39
|
|
40
40
|
//プロパティに格納 → NG
|
41
|
-
//$this->
|
41
|
+
//$this->data = array('data1', 'data2'); //メインスレッドに処理が戻った時に、$this->myArrayは既に破棄されていて、アクセス出来ない。
|
42
42
|
|
43
43
|
//セッションに格納 → NG
|
44
44
|
//$_SESSION['myArray'] = $array; //メインスレッドに処理が戻った時に、既に破棄されていて、アクセス出来ない。
|