qt多线程中怎样锁定一个指定的变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt多线程中怎样锁定一个指定的变量?相关的知识,希望对你有一定的参考价值。
我知道QMutex可以起到锁定的作用,但我的理解是这个只能锁定某一段代码,我想知道假如有一个局部变量QSetting basicIni,有没有一种方法可以锁定这个变量,在锁定期间其他线程无法访问和调用这个变量?类似这样
void read()
lock(basicIni); 锁住该变量
readfile(); 在此期间其他线程无法访问使用该变量
unlock(basicIni); 解锁,可以被其他变量调用
//form1_load中的,启动线程的代码在这里。
private void Form1_Load(object sender, EventArgs e)
//设置最大线程数
int MaxThread = 5;
//获取需要完成的任务列表
OleDbConnection AccessConn = AccessModule.Conn("D:\\\\Flying Co\\\\flying.mdb");
string sql = "select * from ty_task where bay_flag=" + false + " order by bay_id asc";
OleDbCommand comm = new OleDbCommand(sql, AccessConn);
OleDbDataReader list = comm.ExecuteReader();
while (list.Read())追问
这个不是qt吧,莫非qt中的解决方法和这个类似,但没看出来线程锁在哪
参考技术A 在对象上包装一层,每当要对这个对象存取的时候就加锁追问抱歉没看明白,包装一层是指把存取操作封装为一个函数,在函数里面加QMutex吗?
本回答被提问者采纳Qt多线程调用gdal库接口
作者:朱金灿
来源:clever101的专栏
效果图和程序说明
效果图如下:
这个程序是Qt的GUI程序,用于给指定的图像文件创建金字塔。
为什么要使用多线程
使用多线程的好处主要有两点:
1.多线程在很多时候显得更人性化些。比如界面更新使用一个线程,后台算法使用另一个线程。这样后台算法线程和界面线程就互不影响。
2.现在的机器一般都带多核处理器,使用多线程正好能够充分利用硬件资源。
如何在Qt中使用多线程
下面以创建影像金字塔为例说明如何在Qt使用多线程中调用gdal库接口。首先考虑的是如何规划线程:一般来说就是主线程也就是UI线程负责更新进度条,算法进程负责处理数据。
1.从QThread类中派生一个类CreatePyramidThread,用于实现创建图像金字塔。主要代码如下:
以上是关于qt多线程中怎样锁定一个指定的变量?的主要内容,如果未能解决你的问题,请参考以下文章