我有以下結構的類:修改數據
class Nginx_sender
{
private:
std::vector<std::string> mMessagesBuffer;
boost::mutex mMutex;
void SendMessage(const std::string &msg)
{
mMutex.lock();
mMessagesBuffer.push_back(msg);
mMutex.unlock();
std::cout << "Vector size: " << mMessagesBuffer.size() << std::endl;
}
void NewThreadFunction()
{
while(true) {
mMutex.lock();
if (mMessagesBuffer.size() >= 1) std::cout << ">=1\n";
mMutex.unlock();
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
}
}
};
int main()
{
Nginx_sender *NginxSenderHandle;
boost::thread sender(boost::bind(&Nginx_sender::NewThreadFunction, &NginxSenderHandle));
// ...
}
NewThreadFunction
在新的線程中運行,它會檢查mMessagesBuffer
大小。現在我打電話隨時隨地main
功能:NginxSenderHandle->SendMessage("Test");
這說明了:Vector size: 1
第一次,2
秒時間等
但是!在NewThreadFunction
它總是== 0.爲什麼它會是?
您應該只在持有互斥鎖時檢查緩衝區大小,如在打印或保存到局部變量中'mMessagesBuffer.size()'的值。看看會發生什麼。 – EmeryBerger
你確定你沒有意外創建兩個'Nginx_sender'嗎?發佈一個完整的'main',展現行爲。 – molbdnilo