2015-10-07 3 views
-2

Извлеченные из кода для «Motion»Что делает эта структура контекста нитей? В чем его цель?

struct context { 
char conf_filename[PATH_MAX]; 
int threadnr; 
unsigned short int daemon; 
char pid_file[PATH_MAX]; 

struct config conf; 
struct images imgs; 
struct trackoptions track; 
struct netcam_context *netcam; 
struct image_data *current_image;  /* Pointer to a structure where the image, diffs etc is stored */ 
unsigned short int new_img; 

int locate; 
struct rotdata rotate_data;    /* rotation data is thread-specific */ 

int noise; 
int threshold; 
int diffs_last[THRESHOLD_TUNE_LENGTH]; 
int smartmask_speed; 

/* Commands to the motion thread */ 
volatile unsigned short int snapshot; /* Make a snapshot */ 
volatile unsigned short int makemovie; /* End a movie */ 
volatile unsigned short int finish;  /* End the thread */ 
volatile unsigned short int restart;  /* Restart the thread when it ends */ 
/* Is the motion thread running */ 
volatile unsigned short int running; 
volatile int watchdog; 

... 
}; 

Я предполагаю, что программа в Linux явно не может просто иметь один единственный процесс, таким образом, потребность в «нити», так же, как программы Java.

И постоянная проблема с потоками переключается между ними, это, конечно, может быть сделано в основном ОС Linux, если вы хотите.

Поэтому нам нужна структура контекста, чтобы хранить все данные, необходимые для выполнения такой операции, и за ее пределами - поскольку для выполнения так называемого потока явно требуется структура контекста для хранения всей важной информации.

Итак, у вас может быть массив «контекстной структуры», как показано выше, с каждым потоком, соответствующим структуре.

Так вот мои вопросы:

A. Правильно ли я в сделать все вышеуказанные предположения? Или я пропустил его на 100 миль? Я получаю, что в определенный момент эти структуры ARE темы, или, по крайней мере, очень важная часть.

B. Помимо сохранения важной информации, необходимой для запуска и переключения потоков, что еще может быть создано этой структурой? Я понимаю, что код неполный, так что это довольно открытый вопрос. Рекомендуется поощрять ответы на основе предыдущих примеров кодирования.

C. Является ли такая практика распространенной? Под «такой практикой» я имею в виду разделение вашего приложения на несколько потоков и использование контекстных структур для отслеживания их?

ответ

0

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

Такая информация требуется только ядру. В приложении вы используете переменную pthread_t для хранения информации об этом потоке.