我开发了一个只能在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是模块的全局变量, 但是,我得到两个额外的线程而不是一个? 怎么预防呢?
答案 0 :(得分:0)
我明白了。
在Widnws下,apache启动了2个进程:
每个模块的dll都加载到主进程和工作进程中,因此我们有两组独立的模块全局变量。
对于每个模块,“static void ite_mymodule_register_hooks(apr_pool_t *p)
”被调用两次。
但是有一个传递给ap_hook_child_init(...)
的函数,我调用ite_child_init
只调用一次而且仅用于子进程,所以线程应该在这个函数中启动。