Итак, у меня есть приложение, представляющее собой сервер, который открывает несколько потоков, которые будут использоваться для запросов к базе данных. В моей функции приема я проверил вывод для своего запроса, который я построил, и он выглядит нормально, когда я вычисляю поток ostringstream, поэтому я добавляю его в вектор. Затем я вырезаю вектор, и он тоже выглядит нормально. Все это делается в блокировке мьютекса, поэтому я разблокирую мьютекс. Мои потоки базы данных находятся в цикле while, который проверяет, является ли мой vector.size() > 0.
Проблема, с которой я сталкиваюсь, заключается в том, что мой цикл никогда не запускается, потому что он никогда не видит вектор> 0 (что должно быть, потому что я смог вычислить вектор. начало (), и он работал нормально. Может ли кто-нибудь взглянуть на код У меня есть, и скажите мне, есть ли какие-либо проблемы, которые могут быть причиной этой проблемы.
#Header
class CNetworkService : public Service
{
public:
CNetworkService(void);
~CNetworkService(void);
std::ostringstream query;
string record;
std::vector<string> queue;
string IP;
unsigned int Port;
void DBWork();
bool SaveLog(string insert);
protected:
virtual void handle(LogicalConnection* pClient, IncomingPacket* pRequest);
};
#Source File
//In my receive handler
mtx.lock();
query << var1 << var2;
queue.push_back(query.str());
mtx.unlock();
query.clear();
//This is the function that the database threads are looping in
void CNetworkService::DBWork()
{
while(true)
{
mtx.lock();
while(queue.size() > 0)
{
printf("Adding new record \n");
SaveLog(queue.front());
queue.erase(queue.begin());
}
mtx.unlock();
}
}
//The code in the main thread which launches each thread. StartDBThread does some reporting stuff and then lauches the DBWork function, and I can see that DBWork is getting called. In the original attempt I was trying to launch 4 threads, but for now I have scaled it back to 1 thread in order to test and get a working solution.
std::thread threads[1];
// spawn 1 threads:
for (int i=0; i<1; ++i)
threads[i] = std::thread(StartDBThread, i+1);
for (auto& th : threads) th.join();
std::queue
? - person Some programmer dude   schedule 22.04.2014