Как разделить переменные между asynccallbacks.c и action.c - PullRequest
0 голосов
/ 15 февраля 2019

Мой скрипт имеет асинхронный диалог, который опрашивает очередь на наличие новых сообщений, в то время как пользователь выполняет другие задачи.Я поместил web_reg_async_attributes () в init, мои обратные вызовы находятся в asynccallbacks.c, а моя основная логика - в action.c. Асинхронный опрос каждые 5 секунд проверяет очередь сообщений.Когда появляется сообщение, я бы хотел, чтобы обратный вызов установил флаг, к которому у action.c есть доступ, чтобы он мог условно выполнить логику.Я попытался использовать глобальную переменную, объявленную в init, но она не отображается в asynccallbacks.c.

Есть ли способ сделать это?(Я не хочу использовать файлы, потому что я измеряю действия, которые занимают менее секунды, и если я помещу файловую систему в картинку, время моего ответа не будет репрезентативным).

1 Ответ

0 голосов
/ 17 февраля 2019

В первом файле (asynccallbacks.h):

// Explicit definition, this actually allocates
// as well as describing
int Global_Variable;

// Function prototype (declaration), assumes 
// defined elsewhere, normally from include file.       
void SomeFunction(void);        

int main(void) {
    Global_Variable = 1;
    SomeFunction();
    return 0;
}

Во втором файле (action.c):

// Implicit declaration, this only describes and
// assumes allocated elsewhere, normally from include
extern int Global_Variable;  

// Function header (definition)
void SomeFunction(void) {       
    ++Global_Variable;
}

В этом примере определяется переменная Global_Variableв asynccallbacks.h.Чтобы использовать ту же переменную в action.h, она должна быть объявлена.Независимо от количества файлов, глобальная переменная определяется только один раз;однако он должен быть объявлен в любом файле, кроме того, который содержит определение.

...