user-0 提问: 为什么会调不到啊， 老师们，高手们都来看下吧

回复:
user: user-1
content: 引用 4 楼 u014325402 的回复:引用 3 楼 user-1 的回复:[quote=引用 2 楼 u014325402 的回复:] [quote=引用 1 楼 user-1 的回复:] 运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号你好，这个程序设计的是这样的，先执行完set...之后，才回去调用 hw_driv_traini_instr.cpp里的那个接口，进而才会执行到get...的,sleep几秒时间太长了，你说的用发信号怎么用呢？ 简单一点定义一个全局flag变量就可以了，初始为0,设置之后为1,读到那边循环判断flag，为0则sleep一下减小cpu占用。 高级一点有spinlock, mutex, semaphore之类的[/quote] 你好 我用简单的全局变量和互斥锁mutex都用了，现在的现象是：用互斥锁时，程序进入后就一直停在里面get，出不来， 不同互斥锁，用简单的全局变量，每次进入去读，一直判断为0， 尽管我开时时就在调用set后给这个全局变量赋值了，它还是一直读到的是0，程序如下： set_Snapshot（）	 {     ............ 	 if(type == H_PIC_VGA) 	 {       set_pic = H_PIC_VGA; 	 } 	 else if(type == H_PIC_QVGA)    {      printf("#########################################748596\n");       set_pic = H_PIC_QVGA; 	 } 	 else if(type == H_CIF) 	 {       set_pic = 0; 	 } 	 else 	 {        printf("picture size is error!\n"); 	 } 	 get_fag = 1;//这个在构造函数里初始化为0了。 }  get我是这样写的： unsigned int CHw_Driv_Traini_Instr::get_Snapshot(unsigned char * h_size) {  	 //static pthread_mutex_t xml_mutex = PTHREAD_MUTEX_INITIALIZER;	  	// pthread_mutex_lock(&xml_mutex); 	  	 if(get_fag == 0) 	 { 			 printf("GGGGGGGGGGGGGGGGGGGGEEEEEEEEEETTT\n");  			 return -1; 	 } 	  	  printf("--!!!!!!!!!!$$$$$$-%d-h--\n", set_pic);  		     *h_size = set_pic;  	// pthread_mutex_unlock(&xml_mutex); 	  	 return *h_size; } [/quote] 在get里要循环判断flag直到为1 用mutex要定义成全局变量并程序启动时就初始化，你定义成静态变量，怎么在set函数里获取

user: user-0
content: 引用 3 楼 user-1 的回复:引用 2 楼 u014325402 的回复:[quote=引用 1 楼 user-1 的回复:] 运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号你好，这个程序设计的是这样的，先执行完set...之后，才回去调用 hw_driv_traini_instr.cpp里的那个接口，进而才会执行到get...的,sleep几秒时间太长了，你说的用发信号怎么用呢？ 简单一点定义一个全局flag变量就可以了，初始为0,设置之后为1,读到那边循环判断flag，为0则sleep一下减小cpu占用。 高级一点有spinlock, mutex, semaphore之类的[/quote] 你好 我用简单的全局变量和互斥锁mutex都用了，现在的现象是：用互斥锁时，程序进入后就一直停在里面get，出不来， 不同互斥锁，用简单的全局变量，每次进入去读，一直判断为0， 尽管我开时时就在调用set后给这个全局变量赋值了，它还是一直读到的是0，程序如下： set_Snapshot（）	 {     ............ 	 if(type == H_PIC_VGA) 	 {       set_pic = H_PIC_VGA; 	 } 	 else if(type == H_PIC_QVGA)    {      printf("#########################################748596\n");       set_pic = H_PIC_QVGA; 	 } 	 else if(type == H_CIF) 	 {       set_pic = 0; 	 } 	 else 	 {        printf("picture size is error!\n"); 	 } 	 get_fag = 1;//这个在构造函数里初始化为0了。 }  get我是这样写的： unsigned int CHw_Driv_Traini_Instr::get_Snapshot(unsigned char * h_size) {  	 //static pthread_mutex_t xml_mutex = PTHREAD_MUTEX_INITIALIZER;	  	// pthread_mutex_lock(&xml_mutex); 	  	 if(get_fag == 0) 	 { 			 printf("GGGGGGGGGGGGGGGGGGGGEEEEEEEEEETTT\n");  			 return -1; 	 } 	  	  printf("--!!!!!!!!!!$$$$$$-%d-h--\n", set_pic);  		     *h_size = set_pic;  	// pthread_mutex_unlock(&xml_mutex); 	  	 return *h_size; }

user: user-1
content: 引用 2 楼 u014325402 的回复:引用 1 楼 user-1 的回复:运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号你好，这个程序设计的是这样的，先执行完set...之后，才回去调用 hw_driv_traini_instr.cpp里的那个接口，进而才会执行到get...的,sleep几秒时间太长了，你说的用发信号怎么用呢？ 简单一点定义一个全局flag变量就可以了，初始为0,设置之后为1,读到那边循环判断flag，为0则sleep一下减小cpu占用。 高级一点有spinlock, mutex, semaphore之类的

user: user-0
content: 引用 1 楼 user-1 的回复:运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号你好，这个程序设计的是这样的，先执行完set...之后，才回去调用 hw_driv_traini_instr.cpp里的那个接口，进而才会执行到get...的,sleep几秒时间太长了，你说的用发信号怎么用呢？

user: user-1
content: 运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号

user: user-0
content: 引用 9 楼 user-1 的回复:你每次都new一个instance，set与get操作的对象压根就不是同一个谢谢啊，已近解决了，正如你所说。

user: user-1
content: 你每次都new一个instance，set与get操作的对象压根就不是同一个

user: user-0
content: 引用 7 楼 user-1 的回复:[quote=引用 6 楼 u014325402 的回复:] 我把它设置为全局变还是不行，循环我这个程序不能写， 不能等待的，程序后面还有重要的功能没完成，得不到set设置的，使用默认的。 现在的情况是在自己本文件的接口内可以读到设置的，别的文件接口来读，就会读到0， 在别的文件里使用要加extern[/quote]可我是用instance来调用接口的呀

user: user-1
content: 引用 6 楼 u014325402 的回复:我把它设置为全局变还是不行，循环我这个程序不能写， 不能等待的，程序后面还有重要的功能没完成，得不到set设置的，使用默认的。 现在的情况是在自己本文件的接口内可以读到设置的，别的文件接口来读，就会读到0， 在别的文件里使用要加extern

user: user-0
content: 引用 5 楼 user-1 的回复:引用 4 楼 u014325402 的回复:[quote=引用 3 楼 user-1 的回复:] [quote=引用 2 楼 u014325402 的回复:] [quote=引用 1 楼 user-1 的回复:] 运行thread 是异步的，你要么启动thread后sleep几秒，要么set完后发一个信号，在使用之前等到这个信号你好，这个程序设计的是这样的，先执行完set...之后，才回去调用 hw_driv_traini_instr.cpp里的那个接口，进而才会执行到get...的,sleep几秒时间太长了，你说的用发信号怎么用呢？ 简单一点定义一个全局flag变量就可以了，初始为0,设置之后为1,读到那边循环判断flag，为0则sleep一下减小cpu占用。 高级一点有spinlock, mutex, semaphore之类的[/quote] 你好 我用简单的全局变量和互斥锁mutex都用了，现在的现象是：用互斥锁时，程序进入后就一直停在里面get，出不来， 不同互斥锁，用简单的全局变量，每次进入去读，一直判断为0， 尽管我开时时就在调用set后给这个全局变量赋值了，它还是一直读到的是0，程序如下： set_Snapshot（）	 {     ............ 	 if(type == H_PIC_VGA) 	 {       set_pic = H_PIC_VGA; 	 } 	 else if(type == H_PIC_QVGA)    {      printf("#########################################748596\n");       set_pic = H_PIC_QVGA; 	 } 	 else if(type == H_CIF) 	 {       set_pic = 0; 	 } 	 else 	 {        printf("picture size is error!\n"); 	 } 	 get_fag = 1;//这个在构造函数里初始化为0了。 }  get我是这样写的： unsigned int CHw_Driv_Traini_Instr::get_Snapshot(unsigned char * h_size) {  	 //static pthread_mutex_t xml_mutex = PTHREAD_MUTEX_INITIALIZER;	  	// pthread_mutex_lock(&xml_mutex); 	  	 if(get_fag == 0) 	 { 			 printf("GGGGGGGGGGGGGGGGGGGGEEEEEEEEEETTT\n");  			 return -1; 	 } 	  	  printf("--!!!!!!!!!!$$$$$$-%d-h--\n", set_pic);  		     *h_size = set_pic;  	// pthread_mutex_unlock(&xml_mutex); 	  	 return *h_size; } [/quote] 在get里要循环判断flag直到为1 用mutex要定义成全局变量并程序启动时就初始化，你定义成静态变量，怎么在set函数里获取[/quote]，我把它设置为全局变还是不行，循环我这个程序不能写， 不能等待的，程序后面还有重要的功能没完成，得不到set设置的，使用默认的。 现在的情况是在自己本文件的接口内可以读到设置的，别的文件接口来读，就会读到0，