snipplets.dev/code/C/rest_server/qa/question.md
2023-09-26 22:05:13 +03:00

62 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Помогите с проблемой. Не завершается `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