This commit is contained in:
Alexander Popov 2023-08-01 03:27:24 +03:00
parent 33e594f6af
commit c0aaec4c08
Signed by: iiiypuk
GPG Key ID: E47FE0AB36CD5ED6
2 changed files with 61 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

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