linux gcc c89
В настоящее время у меня есть цикл обработки событий, который будет захватывать и обрабатывать события.Этот цикл обработки событий будет выполняться в своем собственном потоке, созданном из основной функции.В целях тестирования я использую usleep в этом цикле.
У меня есть условие app_running для управления циклом и выхода из цикла.
Однако, когда я запускаю свое приложение, я не хочувыйти из главного, потому что это приведет к завершению приложения.Поэтому у меня есть метод getchar () для ожидания ввода, указывающего, что я хочу завершить приложение.Это установит app_running в false для выхода из цикла событий.Это все выглядит немного дешево.Есть ли лучший способ сделать это без использования getchar ()?
Большое спасибо за любые предложения,
Заголовок
#ifndef NETWORK_TASKS_H_INCLUDED
#define NETWORK_TASKS_H_INCLUDED
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
int app_running;
void* process_events(void);
#endif /* NETWORK_TASKS_H_INCLUDED */
Реализация
#include <stdio.h>
#include <unistd.h>
#include "network_tasks.h"
void* process_events(void)
{
app_running = TRUE;
while(app_running) {
#define TIMEOUT 3000000
/* This will be used for capturing events. use usleep for simulating testing */
/* if(net_events(TIMEOUT) != 0) { */
/* process_network_event(); */
/* } */
/* Just for testing */
usleep(TIMEOUT);
printf("Sleeping.....\n");
}
printf("Finished sleeping....\n");
return NULL;
}
main
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>
#include "network_tasks.h"
int main(void)
{
pthread_t th_id = 0;
int th_rc = 0;
th_rc = pthread_create(&th_id, NULL, (void*)process_events, NULL);
if(th_rc == -1) {
fprintf(stderr, "Cannot create thread [ %s ]\n", strerror(errno));
return -1;
}
getchar();
app_running = FALSE;
pthread_exit(NULL);
return 0;
}