php扩展中如何定义线程安全的全局对象?-问答-阿里云开发者社区-阿里云

开发者社区> exinnet> 正文

php扩展中如何定义线程安全的全局对象?

2016-01-25 17:31:04 4564 1

php扩展中如何定义线程安全的全局对象?

取消 提交回答
全部回答(1)
  • exinnet
    2019-07-17 18:26:31
    已采纳

    开始,把php_tclip.h中的全局变量声明部分修改为如下:

    ZEND_BEGIN_MODULE_GLOBALS(tclip)

    CascadeClassifier face_cascade;
    char *face_config_path;

    ZEND_END_MODULE_GLOBALS(tclip)
    结果报如下错误:

    error: ‘CascadeClassifier’ does not name a type

    看来这个类没有在头文件中声明。那就另辟蹊径,改为其它方式。把代码改为

    ZEND_BEGIN_MODULE_GLOBALS(tclip)

    void *face_cascade;
    char *face_config_path;

    ZEND_END_MODULE_GLOBALS(tclip)
    然后在tclip.c中进行了如下修改:

    1.首先定义了一个全局变量。

    static CascadeClassifier face_cascade;
    2.修改PHP_MINIT_FUNCTION(tclip)。代码如下:

    PHP_MINIT_FUNCTION(tclip)
    {

    /* If you have INI entries, uncomment these lines */
    REGISTER_INI_ENTRIES();
    
    string face_config_path = (TCLIP_G(face_config_path) == "" || TCLIP_G(face_config_path) == NULL)? "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" :TCLIP_G(face_config_path);
    if( !face_cascade.load( face_config_path ) ){ 
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "can not load classifier file!%s", face_config_path.c_str());
        return FAILURE; 
    }
    TCLIP_G(face_cascade) = &face_cascade;
    return SUCCESS;

    }

    调用全局对象的方式如下:

    ((CascadeClassifier *)TCLIP_G(face_cascade))->detectMultiScale( img_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
    注意,php扩展想线程安全,那就用相关宏来访问全局变量。如上面的TCLIP_G(face_cascade)。

    参考资料 php扩展中如何定义线程安全的全局对象

    0 0
相关问答

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 223059浏览量 回答数 162

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157134浏览量 回答数 145

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146818浏览量 回答数 22

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 126875浏览量 回答数 2

33

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 277599浏览量 回答数 33

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 256918浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 431651浏览量 回答数 294

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302654浏览量 回答数 249

97

回答

Redhat/CentOS一键安装web环境全攻略

xiaofanqie 2011-08-11 14:51:38 123238浏览量 回答数 97

13

回答

游戏云精彩帖汇总

nono20011908 2014-08-22 11:00:12 203668浏览量 回答数 13
+关注
exinnet
淘宝技术专家
91
文章
70
问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载