Извлеченные из кода для «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. Является ли такая практика распространенной? Под «такой практикой» я имею в виду разделение вашего приложения на несколько потоков и использование контекстных структур для отслеживания их?