• 5558阅读
  • 2回复

多线程处理sql查询结果遇到的问题 [复制链接]

上一主题 下一主题
离线yooi
 
只看楼主 正序阅读 楼主  发表于: 2008-11-03
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我尝试使用10个工作线程处理query的结果, 大概的程序是这样的

QSqlQuery query;

.............................

int size = query.numRowsAffected();
for(int i = 0 ; i < MAXTHREAD; ++i)
{
  if(!query.seek( i*( size/MAXTHREAD ) ))
  {
        return 0;
  }
  thread->render(
                                  query, /*process query from seeked position*/
                                  size/MAXTHREAD, /*num of rows want to be handled*/
                                  db  /*db conn*/
                                  );

}
............................
render 已经封装了start方法
if(!isRunning())
{
  start();
}

我已经在所有值操作附近都加了lock

如果在不用wait() block线程的情况下无法处理查询结果, 会报
qGetStringData: Error while fetching data
QSqlQuery: not position on a valid record

在使用wait()逐条处理query时,结果一切正常,但是因为wait 阻塞事件循环,导致界面无响应
而且起不到多线程处理的效果

请教 有什么好的解决方法么?
谢谢~~~~~

离线yooi
只看该作者 2楼 发表于: 2008-11-09
QSqlQuery 并不支持并行查询,QSqlQueryModel使用的时候似乎没有问题,关于那个线程问题,从新开一个线程把阻塞事件循环的处理放进去就没问题了
离线yooi
只看该作者 1楼 发表于: 2008-11-03
根据我的观察, 我觉得QSqlQuery并不是可重入的
我使用的方法是在 query查出的表的不同位置 使用指针同时便利
但是可能并不支持这样的操作, 


希望熟悉Qt SQL操作的高人指点
快速回复
限100 字节
 
上一个 下一个