解决线程中的数据被外部修改导致程序崩溃问题

来源:互联网 发布:周杰伦 四面楚歌 知乎 编辑:程序博客网 时间:2024/05/01 17:06
线程中

 while(flag){

        for(i = bankList.begin(); i != bankList.end(); i++){
        ...............
        }
}
 
 
由于功能需要,要在线程外部对bankList进行增删处理,直接修改会导致程序崩溃。
原因应该是程序处于for循环中,控制循环的变量被修改了。
提示:
QObject::killTimers: timers cannot be stopped from another thread
解决此问题可以采用互斥量,但这样做失去了使用线程的意义。
 
采用这个办法:
 

 while(flag){

tmpList = bankList;

        for(i = tmpList.begin(); i != tmpList.end(); i++){
              ...............
        }
}
使用一个临时变量tmpList控制循环,for循环期间,tmpList不会被改变。for循环结束后,tmpList被赋予新值,按新值运行。
如果想在bankList被修改后立即按修改后的值运行,可以在for循环中设置标记使其立即结束并按新值运行
for(i = tmpList.begin(); flag and (i != tmpList.end()); i++){
      ..............
}
如果程序运行过程中在for循环中还要对bankList进行修改则可以只在这部分使用互斥量(当然不能进行增删处理)
 
 
 
 
 
 
	
				
		
原创粉丝点击