Anders дает хорошую сводку, и здесь является примером аннотации JUnit
@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
Здесь @Test
, аннотация говорит JUnit, что flatfileMissing
метод является тестом, который должен быть выполнен и что ожидаемым результатом является брошенный IOException
. Таким образом, когда Вы запускаете свои тесты, этот метод назовут, и тест передаст или перестанет работать на основе того, брошен ли IOException
.
Я не думаю, что вы можете получить возвращаемое значение.
Вместо этого вы можете сохранить значение как член Worker:
class Worker{
public:
void Do(){
int ret = 100;
// do stuff
m_ReturnValue = ret;
}
int m_ReturnValue;
}
И использовать его так:
Worker worker;
boost::function<void()> th_func = boost::bind(&Worker::Do, &worker);
boost::thread th(th_func);
th.join();
//do something with worker.m_ReturnValue
Кроме того, у вас также есть несколько избыточных вызовов для boost :: bind () и boost :: function (). Вместо этого вы можете сделать следующее:
class Worker{
public:
void operator(){
int ret = 100;
// do stuff
m_ReturnValue = ret;
}
int m_ReturnValue;
}
Worker worker;
boost::thread th(worker());//or boost::thread th(boost::ref(worker));
Вы можете сделать это, потому что конструктор Thread является удобной оболочкой для внутреннего вызова bind (). Конструктор потоков с аргументами