手把手撸PHP扩展 0x07: 协程创建(三)

上一篇文章,我们成功的实现了把一个用户空间的函数传递给创建协程的接口的功能。这一篇文章,我们来介绍一下如何去调用这个用户空间的函数。

我们实现的接口现在变成了:

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

function task()
{
	echo "successn";
}

StudyCoroutine::create('task');

执行后,结果如下:

~/codeDir/cppCode/study # php test.php
success
~/codeDir/cppCode/study # 

ok,执行成功了。所以,我们这里的核心就是zend_fcall_infozend_fcall_info_cachezend_call_function。下篇文章将会介绍这三个东西。

下一篇:协程创建(四)

———-伟大的分割线———–

PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!

饭米粒只发原创或授权发表的文章,不转载网上的文章

所发的文章,均可找到原作者进行沟通。

也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投搞。

未经允许不得转载:PHP100中文网 - 中国第一档PHP资源分享门户 » 手把手撸PHP扩展 0x07: 协程创建(三)

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏