Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
study
提交
04080375
S
study
项目概览
OpenDocCN
/
study
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
study
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
04080375
编写于
6月 29, 2019
作者:
C
codinghuang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增协程创建(三)
上级
846aca23
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
60 addition
and
4 deletion
+60
-4
README.md
README.md
+2
-0
docs/《PHP扩展开发》-协程-协程创建(一).md
docs/《PHP扩展开发》-协程-协程创建(一).md
+2
-2
docs/《PHP扩展开发》-协程-协程创建(三).md
docs/《PHP扩展开发》-协程-协程创建(三).md
+46
-0
docs/《PHP扩展开发》-协程-协程创建(二).md
docs/《PHP扩展开发》-协程-协程创建(二).md
+1
-1
study_coroutine_util.cc
study_coroutine_util.cc
+8
-0
test.php
test.php
+1
-1
未找到文件。
README.md
浏览文件 @
04080375
...
...
@@ -20,3 +20,5 @@ PHP版本:7.3.5
[
7、协程创建(二)
](
./docs/《PHP扩展开发》-协程-协程创建(二).md
)
[
8、协程创建(三)
](
./docs/《PHP扩展开发》-协程-协程创建(三).md
)
docs/《PHP扩展开发》-协程-协程创建(一).md
浏览文件 @
04080375
...
...
@@ -289,4 +289,5 @@ success!
OK,到这里,我们算是完成了协程创建接口的前期工作。
[
下一篇:协程创建(二)
](
./《PHP扩展开发》-协程-协程创建(二).md
)
\ No newline at end of file
[
下一篇:协程创建(二)
](
./《PHP扩展开发》-协程-协程创建(二).md
)
docs/《PHP扩展开发》-协程-协程创建(三).md
0 → 100644
浏览文件 @
04080375
# 协程创建(三)
[
上一篇文章
](
./《PHP扩展开发》-协程-协程创建(二).md
)
,我们成功的实现了
**把一个用户空间的函数传递给创建协程的接口**
的功能。这一篇文章,我们来介绍一下如何去调用这个用户空间的函数。
我们实现的接口现在变成了:
```
c++
PHP_METHOD
(
study_coroutine_util
,
create
)
{
zend_fcall_info
fci
=
empty_fcall_info
;
zend_fcall_info_cache
fcc
=
empty_fcall_info_cache
;
zval
result
;
ZEND_PARSE_PARAMETERS_START
(
1
,
1
)
Z_PARAM_FUNC
(
fci
,
fcc
)
ZEND_PARSE_PARAMETERS_END_EX
(
RETURN_FALSE
);
fci
.
retval
=
&
result
;
if
(
zend_call_function
(
&
fci
,
&
fcc
)
!=
SUCCESS
)
{
return
;
}
*
return_value
=
result
;
}
```
`PHP`
脚本如下:
```
PHP
<?php
Study\Coroutine::create(function() {
echo "success\n";
});
```
执行后,结果如下:
```
shell
~/codeDir/cppCode/study
# php test.php
success
~/codeDir/cppCode/study
#
```
ok,执行成功了。所以,我们这里的核心就是
`zend_fcall_info`
、
`zend_fcall_info_cache`
和
`zend_call_function`
。下篇文章将会介绍这三个东西。
docs/《PHP扩展开发》-协程-协程创建(二).md
浏览文件 @
04080375
...
...
@@ -246,5 +246,5 @@ Study\Coroutine::create(function() {
没报错,参数解析成功。
[
下一篇:协程创建(三)
](
./《PHP扩展开发》-协程-协程创建(三).md
)
study_coroutine_util.cc
浏览文件 @
04080375
...
...
@@ -10,10 +10,18 @@ PHP_METHOD(study_coroutine_util, create)
{
zend_fcall_info
fci
=
empty_fcall_info
;
zend_fcall_info_cache
fcc
=
empty_fcall_info_cache
;
zval
result
;
ZEND_PARSE_PARAMETERS_START
(
1
,
1
)
Z_PARAM_FUNC
(
fci
,
fcc
)
ZEND_PARSE_PARAMETERS_END_EX
(
RETURN_FALSE
);
fci
.
retval
=
&
result
;
if
(
zend_call_function
(
&
fci
,
&
fcc
)
!=
SUCCESS
)
{
return
;
}
*
return_value
=
result
;
}
static
const
zend_function_entry
study_coroutine_util_methods
[]
=
...
...
test.php
浏览文件 @
04080375
<?php
Study\Coroutine
::
create
(
function
()
{
echo
1
;
echo
"success
\n
"
;
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录