QT多线程问题:子线程中的变量如何传递给主线程?
答案:1 悬赏:80 手机版
解决时间 2021-03-31 14:27
- 提问者网友:抽煙菂渘情少年
- 2021-03-31 06:00
QT多线程问题:子线程中的变量如何传递给主线程?
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-03-31 06:31
public int _CurrentThread;
//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噢
//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噢
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯