从“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操作系统完成,如果你愿意的话。
因此,我们需要一个上下文结构来保存我们执行此类操作所需的所有数据 - 因为运行所谓的线程显然需要一个上下文结构来存储所有重要信息。
所以最终你可以得到一个像上面所示的“context struct”数组,每个线程对应一个struct。
所以这是我的问题:
一个。我是否正确做出以上所有假设?或者我错过了100英里?我知道在某些时候,这些结构是线程,或者至少是非常重要的一部分。
B中。除了保持对运行和切换线程至关重要的信息之外,这个结构还有什么用途?我知道代码不完整,所以这是一个相当开放的问题。鼓励基于以前的编码经验的答案。
℃。这样的做法常见吗?通过“这种做法”,我的意思是将您的应用程序划分为多个线程,并使用上下文结构来跟踪它们?
答案 0 :(得分:0)
您在需要以异步方式处理数据的程序中使用线程,但是我不熟悉使用上下文结构,至少不在应用程序代码中。
只有内核需要这种信息。在应用程序中,您使用pthread_t变量来保留有关该线程的信息。