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;
}
}
編集:
奇妙なことに、次のコードも機能します。つまり、ファンクターを 1 回呼び出してから複数のスレッドを作成しても、クラッシュは発生しません。また、このクラッシュは Tomcat でのみ発生し、スタンドアロンの Java アプリケーションを作成した場合には発生しません。なぜこれが起こるのか誰か説明してもらえますか?
MyFunctor func1;
func1();
for (int i = 0; i < 10; ++i)
{
MyFunctor func;
boost::thread t(func);
}