質問編集履歴
1
ソース2の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,13 +14,21 @@
|
|
14
14
|
|
15
15
|
の順番に記述して実行すると、run()の次へ処理が進まず、addTimer()が完了するまで待ってしまう。
|
16
16
|
|
17
|
-
下記のソースのvar_dumpを基準に言うと、現状ではA→B→C→F→Gとなり、
|
17
|
+
下記のソース1のvar_dumpを基準に言うと、現状ではA→B→C→F→Gとなり、
|
18
18
|
|
19
19
|
目的の処理であるD・Eを通らない。
|
20
20
|
|
21
|
+
問題解決のためaddPeriodicTimer()を使ったソース2を用意した。
|
22
|
+
|
23
|
+
非同期ならAAAA...BBBB...と出力されるはずだが、実際に実行すると、
|
24
|
+
|
25
|
+
A(1秒後)BA(1秒後)B...と非同期とは考えられない出力になった。
|
26
|
+
|
27
|
+
何か勘違いしてるはずなんだけど...
|
21
28
|
|
22
29
|
|
30
|
+
|
23
|
-
###
|
31
|
+
###ソース1
|
24
32
|
|
25
33
|
```PHP
|
26
34
|
|
@@ -122,6 +130,52 @@
|
|
122
130
|
|
123
131
|
|
124
132
|
|
133
|
+
###ソース2
|
134
|
+
|
135
|
+
```PHP
|
136
|
+
|
137
|
+
$deferred = new Promise\Deferred();
|
138
|
+
|
139
|
+
$loop = EventLoop\Factory::create();
|
140
|
+
|
141
|
+
$timeout_sec = 0.1;
|
142
|
+
|
143
|
+
$tick = 0.01;
|
144
|
+
|
145
|
+
$elapsed = 0.0;
|
146
|
+
|
147
|
+
$loop->addPeriodicTimer($tick,
|
148
|
+
|
149
|
+
function (EventLoop\Timer\Timer $timer) use ($loop, &$elapsed, $tick, $timeout_sec) {
|
150
|
+
|
151
|
+
$elapsed += $tick;
|
152
|
+
|
153
|
+
var_dump('A:' . microtime(TRUE) . ':' . $elapsed);
|
154
|
+
|
155
|
+
// 非同期ならAAAA...BBBB...と出力されるはず。
|
156
|
+
|
157
|
+
sleep(1);
|
158
|
+
|
159
|
+
var_dump('B:' . microtime(TRUE) . ':' . $elapsed);
|
160
|
+
|
161
|
+
if ($elapsed >= $timeout_sec)
|
162
|
+
|
163
|
+
{
|
164
|
+
|
165
|
+
$loop->cancelTimer($timer);
|
166
|
+
|
167
|
+
var_dump('C:' . microtime(TRUE));
|
168
|
+
|
169
|
+
}
|
170
|
+
|
171
|
+
});
|
172
|
+
|
173
|
+
$loop->run();
|
174
|
+
|
175
|
+
```
|
176
|
+
|
177
|
+
|
178
|
+
|
125
179
|
###お願い…
|
126
180
|
|
127
181
|
ReactPHPで使われる非同期処理については、
|