snipplets.dev/code/C/rest_server/qa/question.md

2.4 KiB
Raw Blame History

Помогите с проблемой. Не завершается while цикл при изменении переменной running.

while (running) {
    // loop
}

Использую библиотеку ulfius для реализации REST API сервера. Есть функция thread_server(), которую из main() запускаю в отдельном потоке, в которой запускается ulfius сервер.

pthread_t tid;
pthread_create(&tid, NULL, thread_server, (void *)&tid);

Сервер запускаю следующим образом:

int ret;
ret = ulfius_start_framework(&instance);

if (ret == U_OK) {
    printf("Server started at %d.\n", PORT);
} else {
    printf("Error starting server as %d port.\n", PORT);
}

while (running) {
    printf("\r%b", running);
}
printf("Server halt.\n");

ulfius_stop_framework(&instance);
ulfius_clean_instance(&instance);

running - глобальная переменная типа bool.

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

if (ret == U_OK) {
    getchar();
}

Есть callback функция, которая вызывается при обращении к API, в которой я проверяю отправленное пользователем значение, и если оно равняется quit присваиваю переменной running значение false, чтобы сервер закрылся.

Если из цикла while (running) { printf("\r%b", running); } убрать printf(), либо выполнять другие операции, например присвоение a = 1; то сервер не закрывается, хотя значение running равняется 0.

Я пишу утилиту для внутенного использования, которая общается с Arduino платой посредством библиотеки libserialport и в цикле читает данные.

Хочу, чтобы утилита по REST получала данные и отправляла их на плату, но не получается реализовать нормальное завершение программы, потому что сервер не умирает.

OS: Linux