Я тестирую потоки С++ 11 с этим кодом, но при создании потока у меня возникает ошибка нет соответствующей функции для вызова 'std::thread::thread()'.
Это как если бы что-то было не так с функцией, которую я передаю std::thread ctr, но я не понимаю, почему это неправильно. Он неполный, но мне кажется правильным:
Заголовок:
#ifndef CONNECTION_H
#define CONNECTION_H
#include <thread>
#include <mysql++.h>
class Connection
{
public:
Connection(std::string mysqlUser, std::string mysqlPassword);
~Connection();
private:
std::string mysqlUser;
std::string mysqlPassword;
std::string mysqlIP;
int mysqlPort;
mysqlpp::Connection mysqlConnection;
std::thread connectionThread;
void threadLoop();
};
#endif // CONNECTION_H
Источник:
#include "connection.h"
Connection::Connection(std::string mysqlUser, std::string mysqlPassword)
{
this->mysqlUser = mysqlUser;
this->mysqlPassword = mysqlPassword;
this->mysqlIP = "localhost"; //default
this->mysqlPort = 3306; //default
//Launch thread
std::thread connectionThread(threadLoop);
}
Connection::~Connection(){
mysqlConnection.disconnect();
}
void Connection::threadLoop(){
//Connect to mySQL database
mysqlConnection = new mysqlpp::Connection(false);
if(mysqlConnection.connect(NULL, mysqlIP.c_str(), mysqlUser.c_str(), mysqlPassword.c_str(), mysqlPort)){
std::string consulta = "SELECT * FROM 'Coordinates'";
mysqlpp::Query query = mysqlConnection.query(consulta);
mysqlpp::StoreQueryResult res = query.store();
query.reset();
}
while(true){
// Stuff
}
}
std::thread
не ожидает бесплатную функцию или, по крайней мере, статическую функцию-член? Как он может знать, на каком объекте вызыватьConnection::threadLoop
? - person Nicola Musatti   schedule 27.09.2012std::thread
будет уничтожен, когда конструкторConnection
завершит работу. То есть он будет уничтожен немедленно. Уничтожениеstd::thread
без присоединения к нему вызываетterminate()
, что, вероятно, не то, что вам нужно. - person Gorpik   schedule 27.09.2012