我正在使用 Netbeans 构建一个加载 c++ 本机 dll 的 java web 项目(基于 tomcat 6.02)。我正在使用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;
}
}
编辑:
奇怪的是,下面的代码也有效。也就是说,如果我调用一次仿函数然后创建多个线程,则不会发生崩溃。此外,这种崩溃只发生在 Tomcat 中,而不是在我制作独立的 java 应用程序时。任何人都可以解释为什么会这样吗?
MyFunctor func1;
func1();
for (int i = 0; i < 10; ++i)
{
MyFunctor func;
boost::thread t(func);
}