• 3952阅读
  • 0回复

QNetWrok如何变异步为同步? [复制链接]

上一主题 下一主题
离线langziyang
 

只看楼主 倒序阅读 楼主  发表于: 2012-11-02
比如说我有一个QStringList,存放的是一些特定的值,然后循环去网上查到每一个String的网络信息,再显示在一个listwidget。
现在是难点是:查的时候因为需要花的时间比较长,所以如果没有等所有结果都查出来完的话,再去一次重头查询的时候就会提示:
[size=; font-size: 9pt,9pt]QThread::start: Thread creation error: 资源暂时不可用
[size=; font-size: 9pt,9pt]

请问一下如何解决呢?
因为使用了
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(getBillboardInfoFinished(QNetworkReply*)));
所以想把它变为同步的,就是只有这个查询完成后,才能进行下一步操作

  1. //把所有的Hash加入到list中
  2. void mainWidget::getBillboardHashFinished(QNetworkReply *reply){
  3.     for(int i=0;i<searchResultCount;i++){
  4.         BillboardHashList.append(value.property("data").property(i).property("hash").toString());
  5.     }
  6.     for(int j=0;j<100;j++){
  7.         getBillboardInfo(BillboardHashList.at(j));
  8.     }
  9. }
  10. //分别取每一首歌的信息
  11. void mainWidget::getBillboardInfo(const QString &hash){
  12.     QNetworkAccessManager *manager = new QNetworkAccessManager(this);
  13.     QNetworkReply *reply = manager->get(QNetworkRequest("http://"+hash));
  14.     connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(getBillboardInfoFinished(QNetworkReply*)));
  15. }
  16. //循环处理每一首音乐的信息
  17. void mainWidget::getBillboardInfoFinished(QNetworkReply *reply){
  18.     QByteArray songJson = reply->readAll();
  19.     musicListWidget->addItem(item);
  20. }


快速回复
限100 字节
 
上一个 下一个