如何在Apache模块中只创建一个工作线程?

时间:2011-12-06 12:07:05

标签: module apache2

我开发了一个只能在MS Windows下运行的Apache模块。

我希望它能够生成一个addidtion线程,它将执行一些permament系统监视任务并将结果存储在全局变量中。这些变量将由后续的HTTP GET请求读取。

我在

中开始一个帖子
static void ite_mymodule_register_hooks(apr_pool_t *p) 

使用

if(hThread == 0) {
        print(L"creating thread\n");
        hThread= CreateThread(0, 0, thread, 0, 0, 0);
        if(hThread != 0) {
            print(L"thread created\n");
        } else {
            printLastError();
        }
    }

其中hThread是模块的全局变量, 但是,我得到两个额外的线程而不是一个? 怎么预防呢?

1 个答案:

答案 0 :(得分:0)

我明白了。

在Widnws下,apache启动了2个进程:

  • 主进程和
  • 工人流程。

每个模块的dll都加载到主进程和工作进程中,因此我们有两组独立的模块全局变量。

对于每个模块,“static void ite_mymodule_register_hooks(apr_pool_t *p)”被调用两次。

但是有一个传递给ap_hook_child_init(...)的函数,我调用ite_child_init只调用一次而且仅用于子进程,所以线程应该在这个函数中启动。