Как создать только один рабочий поток в модуле Apache? - PullRequest
0 голосов
/ 06 декабря 2011

Я разрабатываю модуль Apache, который будет работать только под MS Windows.

Я хочу, чтобы он порождал только один поток addidtion, который будет выполнять какую-то постоянную задачу мониторинга системы и сохранять результаты в глобальных переменных.Эти переменные будут считываться последующими 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 голосов
/ 07 декабря 2011

Я понял это.

Под Widnws apache запускает 2 процесса:

  • мастер-процесс и
  • рабочий процесс.

DLL каждого модуля загружаются как в главный, так и в рабочий процессы, поэтому у нас есть два независимых набора глобальных переменных модуля.

Для каждого модуля "static void ite_mymodule_register_hooks(apr_pool_t *p)" вызывается дважды.

Но есть функция, переданная в ap_hook_child_init(...), которую я назвал ite_child_init, которая вызывается только один раз и только для дочернего процесса, поэтому поток должен быть запущен в этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...