今天在看解码程序ffmpeg的时候发现,初始化接口是这么写的:
void avcodec_init(void)
{
static int initialized = 0;
if(initialized != 0)
return ;
initialized = 1;
dsputil_static_init();
}
initialized用来控制初始化的次数,很好.
我以前一直用的全局变量统计次数来控制初始化次数,有点麻烦.
DRV_TUN_RESULT drvTuner_initialize( void )
{
__g_init_count++;
if(__g_init_count == 1)
{
__g_filter_working_num = 0;
memset(&__g_cur_info,0,sizeof(DRV_TUN_PARAMS));
if ((__g_usb_tuner_fd = open ("/dev/usb_tuner", O_RDWR)) < 0)
{
perror ("can't open dev file r/w");
return DRV_TUN_FAIL;
}
ioctl(__g_usb_tuner_fd, USB_RCV_START);
}
return DRV_TUN_OK;
}
DRV_TUN_RESULT drvTuner_finalize( void )
{
__g_init_count--;
if(__g_init_count == 0)
{
ioctl(__g_usb_tuner_fd, USB_RCV_CLOSE);
close(__g_usb_tuner_fd);
__g_usb_tuner_fd = -1;
}
return DRV_TUN_OK;
}
但是我后来反思到,如果用这种办法,反初始化时怎么控制?
看来全局有全局的好处,局部有局部的好处,各有千秋.
视情况而定,用那一种.