:)
This commit is contained in:
parent
33e594f6af
commit
c0aaec4c08
BIN
~/C/rest_server/qa/answer.png
Normal file
BIN
~/C/rest_server/qa/answer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
61
~/C/rest_server/qa/question.md
Normal file
61
~/C/rest_server/qa/question.md
Normal 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
|
Loading…
Reference in New Issue
Block a user