如何在 Qt 中使用 QConcurrent class
How to work with QConcurrent class in Qt
我是刚接触Qt的学生。我开始使用 Qt Concurrent 功能编写这个程序。该程序应该计算一个数字是否发散或收敛到1。我假设如果长度超过100,它就会发散。
这是我的代码
#include <QtConcurrent/QtConcurrentMap>
#include <QFuture>
#include <vector>
#include <iostream>
using namespace std;
bool converges(int &n)
{
int count = 0;
while (count < 100 && n > 1)
{
if (n % 2 == 0)
{
n = n/2;
}
else
{
n = 3*n+1;
}
if(count > 100)
{
break;
}
count = count + 1;
}
if (n = 1 && count <= 100)
return true;
else
return false;
}
int main(int argc, char *argv[])
{
int N = 1000000;
vector <int> data;
for(int i = 0; i < N; i++)
{
data.push_back(i);
}
QFuture <void> res = QtConcurrent::map(data,converges);
res.waitForFinished();
return 0;
}
但是我遇到构建错误。对我哪里出错有什么建议吗?
这是我不断收到的错误
main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtConcurrent::ThreadEngineBase::ThreadEngineBase(void)" (__imp_??0ThreadEngineBase@QtConcurrent@@QAE@XZ) referenced in function "public: __thiscall QtConcurrent::IterateKernel > >,void>::IterateKernel > >,void>(class std::_Vector_iterator > >,class std::_Vector_iterator > >)" (??0?$IterateKernel@V?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@H@std@@@std@@@std@@X@QtConcurrent@@QAE@V?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@H@std@@@std@@@std@@0@Z)
正如@Mike 的回答,将 QT += concurrent
添加到我的 .pro
文件对我有用。
我是刚接触Qt的学生。我开始使用 Qt Concurrent 功能编写这个程序。该程序应该计算一个数字是否发散或收敛到1。我假设如果长度超过100,它就会发散。
这是我的代码
#include <QtConcurrent/QtConcurrentMap>
#include <QFuture>
#include <vector>
#include <iostream>
using namespace std;
bool converges(int &n)
{
int count = 0;
while (count < 100 && n > 1)
{
if (n % 2 == 0)
{
n = n/2;
}
else
{
n = 3*n+1;
}
if(count > 100)
{
break;
}
count = count + 1;
}
if (n = 1 && count <= 100)
return true;
else
return false;
}
int main(int argc, char *argv[])
{
int N = 1000000;
vector <int> data;
for(int i = 0; i < N; i++)
{
data.push_back(i);
}
QFuture <void> res = QtConcurrent::map(data,converges);
res.waitForFinished();
return 0;
}
但是我遇到构建错误。对我哪里出错有什么建议吗?
这是我不断收到的错误
main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtConcurrent::ThreadEngineBase::ThreadEngineBase(void)" (__imp_??0ThreadEngineBase@QtConcurrent@@QAE@XZ) referenced in function "public: __thiscall QtConcurrent::IterateKernel > >,void>::IterateKernel > >,void>(class std::_Vector_iterator > >,class std::_Vector_iterator > >)" (??0?$IterateKernel@V?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@H@std@@@std@@@std@@X@QtConcurrent@@QAE@V?$_Vector_iterator@V?$_Vector_val@U?$_Simple_types@H@std@@@std@@@std@@0@Z)
正如@Mike 的回答,将 QT += concurrent
添加到我的 .pro
文件对我有用。