Я использую Netbeans для создания веб-проекта Java (на основе Tomcat 6.02), который загружает родную dll c ++. Я использую библиотеку Jace
, которая упаковывает JNI.
В моем Java-коде у меня есть статическая функция обратного вызова, которую я вызываю из кода C ++. Я пытаюсь вызвать этот обратный вызов в новом потоке, используя boost.Thread, но Tomcat просто умирает без каких-либо сообщений или отчетов о сбоях, когда я это делаю. Однако, если я вызываю функцию напрямую, она работает нормально.
Подскажите, пожалуйста, что может быть не так?
ниже - мой код на C ++, вызывающий сбой:
//from native method:
for (int i = 0; i < 10; ++i)
{
MyFunctor func;
boost::thread t(func);
}
ниже - мой код на C ++, который отлично работает:
//from native method:
for (int i = 0; i < 10; ++i)
{
MyFunctor func;
func();
}
Класс Functor (вызывающий сбой):
class MyFunctor
{
public:
void operator ()() const
{
ArrayList orders, trades;
//...Fill the above ArrayLists;
jace::proxy::test::CallBackTest::callbackFunc(orders, trades);
}
}
следующий мой код Java:
public class CallBackTest {
public static void callbackFunc(ArrayList arraylist, ArrayList arraylist1) {
//System.out.println(); the two arraylists;
}
}
EDIT:
Странно, следующий код также работает. То есть, если я вызову функтор один раз, а затем создаю несколько потоков, сбоев не будет. Также этот сбой происходит только в Tomcat, а не в том случае, если я создаю отдельное Java-приложение. Кто-нибудь может объяснить, почему это происходит?
MyFunctor func1;
func1();
for (int i = 0; i < 10; ++i)
{
MyFunctor func;
boost::thread t(func);
}