qt多线程的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt多线程的问题相关的知识,希望对你有一定的参考价值。
我子线程中run函数当中有一个while循环,现在我想在主线程中点击某一个按钮使while循环停止。循环条件就是flag==true循环,请问如何使子线程和主线程都可以操作同一个变量
QMutex mutex;mutex. lock ();
global::threadflag = true;//将全局变量变为true
mutex.unlock();
有可能确实是return的太快了,子线程还没来得及去结束,主进程已经return。加sleep试试。加个log看看这个showrelayThread->terminate();这句话有没有执行啊。 参考技术A 直接用一个静态的变量可以?
QT多线程问题:子线程中的变量如何传递给主线程?
本人初学QT,菜鸟一只。
在QT多线程编程中,如何将子线程中的某个变量中的值传递给主线程?比如,我要一个子线程不停读取一个串口,主线程在需要的时候提取子线程中读到的数据,应该如何实现?
//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())
ContentParse Spider = new ContentParse();
//如果当前活动线程超过最大线程数,线程休眠
if (Spider.CurrentThread> MaxThread)
Thread.Sleep(2000);
else
//init
Spider.Url = list["bay_task"].ToString();
//启动一个线程
Thread SpiderThread = new Thread(new ThreadStart(Spider.execute));
SpiderThread.Start();
MessageBox.Show(Spider.CurrentThread.ToString());
//任务设置为已处理
sql = "update ty_task set bay_flag=" + true + " where bay_id=" + list["bay_id"].ToString();
AccessModule.Execute(AccessConn, sql);
list.Close();
AccessModule.DisConn(AccessConn);
//线程启动的是这个类的方法
class ContentParse
private string _Url;
//设置任务参数
public string Url
set
_task = value;
public void execute()
//活动线程数加1
Interlocked.Increment(ref _CurrentThread);
//中间处理任务的代码省略
//该线程完成,活动线程减1
Interlocked.Decrement(ref _CurrentThread);
我现在纠结的就是这个Interlocked.Increment(ref _CurrentThread);应该是开一个线程就要加1的对吧?
但是我在form1中间用 MessageBox.Show(Spider.CurrentThread.ToString());,总是0噢
以上是关于qt多线程的问题的主要内容,如果未能解决你的问题,请参考以下文章