2016-07-13 2 views
0
//-------------cpp11 BlockingQueue.h 
//------test2()----------enques messages 
template <typename T> 
int BlockingQueue<T>::test2() 
{ 
    //BlockingQueue<std::string> q; 
    std::thread t(&BlockingQueue<T>::test); 


    for (int i = 0; i<15; ++i) 
    { 
    std::ostringstream temp; 
    temp << i; 
    std::string msg = std::string("msg#") + temp.str(); 
    { 
     std::lock_guard<std::mutex> l(mtx_); 
    std::cout << "\n main enQing " << msg.c_str(); 
    } 
    enQ(msg); 
    std::this_thread::sleep_for(std::chrono::milliseconds(3)); 
    } 
    enQ("quit"); 
    std::cout << "\n _q size is " << q_.size() << std::endl; 
    t.join(); 
    //test(); 
    return q_.size(); 
} 

//--------<test()>----------- dequeues messages 

template <typename T> 
void BlockingQueue<T>::test() 
{ 
std::string msg; 
do 
{ 
msg = deQ(); 
{ 
std::lock_guard<std::mutex> l(mtx_); 
std::cout << "\n thread deQed " << msg.c_str(); 
} 
std::this_thread::sleep_for(std::chrono::milliseconds(10)); 
} while (msg != "quit"); 
} 
//----------<unit test project------------> 
#include"gtest\gtest.h" 
#include"Cpp11-BlockingQueue.h" 

TEST(testBQ, simpleTest) 
{ 
    BlockingQueue<std::string> obj; 
    EXPECT_EQ(0, obj.test2()); 
} 

Error: Error 1 error C2064: term does not evaluate to a function taking 0 arguments in unitTest_MyBQошибка C2064 для многопоточных модульного тестирования

Я пытаюсь проверить свою реализацию очереди блокировки с помощью теста Google. Когда я не использую thread в методе test2() для вызова метода test(), unitTest работает нормально, но выдает указанную выше ошибку, когда поток используется для вызова test().

Как выполнить модульное тестирование потоков?

ответ

1

Сделать это не std::thread t(&BlockingQueue<T>::test, this);

Член-функции указатель на это никогда не вызываемым принимать 0 аргументы - это необходимо, по крайней мере указатель или ссылку на объект, что функция член должен быть вызван (плюс параметры в его сигнатуре).

+0

ваш ответ помог! большое спасибо – askatral

Смежные вопросы