网站组网图,40岁了开始学室内设计,网站需要实名认证,网站建设及管理制度文章一、思路流程
创建一个新线程用来控制亮度#xff0c;线程通过读取用户输入来增加或减少亮度值#xff0c;并使用 ioctl 函数将新亮度值设置到视频设备。
二、代码
/*创建线程来控制亮度*/
pthread_t thread;
pthread_create(thread, NULL, thread_brightness_contrl…一、思路流程
创建一个新线程用来控制亮度线程通过读取用户输入来增加或减少亮度值并使用 ioctl 函数将新亮度值设置到视频设备。
二、代码
/*创建线程来控制亮度*/
pthread_t thread;
pthread_create(thread, NULL, thread_brightness_contrl,(void*)fd);static void*thread_brightness_contrl(void* args)
{int fd (int)args;unsigned char c;int brightness;int delta;struct v4l2_queryctrl qctrl;memset(qctrl,0,sizeof(qctrl));qctrl.id V4L2_CID_BRIGHTNESS;if(0 ! ioctl(fd,VIDIOC_QUERYCTRL,qctrl)){printf(can not query brightness\n);return NULL;}printf(brightness min %d,max %d\n,qctrl.minimum,qctrl.maximum);struct v4l2_control ctl;ctl.id V4L2_CID_BRIGHTNESS;ioctl(fd, VIDIOC_G_CTRL,ctl);while(1){c getchar();if (cu||cU){ctl.value delta;}else if(c D||cd){ctl.value -delta;}if(ctl.value qctrl.maximum) ctl.value qctrl.maximum;if(ctl.value qctrl.minimum) ctl.value qctrl.minimum;ioctl(fd,VIDIOC_S_CTRL,ctl);}return NULL;
};
三、知识点补充
while循环关键点 阻塞等待当执行 c getchar(); 时如果没有输入程序会在这里阻塞。这意味着线程会在此暂停直到用户输入一个字符。 循环继续一旦用户输入一个字符getchar() 返回字符并继续执行循环的剩余部分。循环并未终止它只是被阻塞等待输入。 线程挂起由于 getchar() 阻塞等待输入线程会被挂起等待输入字符。挂起状态并不意味着 while 循环终止而是线程暂停在 getchar() 这行代码。