0

私はiPhoneアプリケーションでBoostスレッドをしばらく使用していて、問題に遭遇したばかりです。時々、アプリケーションがそのようなスレッドを開始しようとすると、呼び出しを試みているときにエラーがスローされstart_thread()、アプリケーションがクラッシュします。

これのデバッグをどこから始めればよいのかよくわかりません。ブーストスレッドを初期化できない理由は、デバッガーからは明らかではないようです。これは、アプリケーションがしばらく実行された後、およびいくつかのスレッドがすでに正常に開始された後にのみ発生することに注意してください。

私は最近UIに取り組んでおり、次のコマンドを使用して、UIへのすべての更新が呼び出された直後に行われるようにしています。

[myViewController performSelectorOnMainThread : @ selector(show_myButton) withObject:nil waitUntilDone:YES];

そのコマンドは機能しているようで、UIはすぐに(遅延する前に)更新されますが、私が抱えているブーストスレッドの問題の原因である可能性があります。それはありそうですか?誰かが以前にこのようなことを経験したことがあり、何が間違っている可能性があるかについて何か提案がありますか?

スレッドを開始するためのコードは次のとおりです。

void ObjectiveCPlusPlusInterface::startMyThread(void* a, myObject* b)
{
 boost::thread AVPlayerThread = boost::thread(&ObjectiveCPlusPlusInterface::myThreadFunction, this, a, b);
}

(ここで、aとbは変数です)

void ObjectiveCPlusPlusInterface::myThreadFunction(void* a, myObject* b)
{
 ...
}

ご覧のとおりstartMyThread()、関数を実行するブーストスレッドを開始しようとしますmyThreadFunction()。ただし、myThreadFunction()ブーストスレッドを開始するとエラーがスローされるため、に到達しません。

4

1 に答える 1

0

マニュアルを見ると、コンストラクboost::threadターが例外をスローできることがわかります。それを確認してください:

try
{
    boost::thread AVPlayerThread(&ObjectiveCPlusPlusInterface::myThread, this, a, b);

    AVPlayerThread.detach();   // or join()?
}
catch (boost::thread_resource_error const &)
{
    // resource error (print a diagnostic!)
}
catch (...)
{
    // some other exception (print a diagnostic!)
}

更新:編集後、スレッドに参加したり切り離したりしていないことがわかりました。それは許可されていません。

上記のブロック全体を文字通りstartMyThread関数内に配置できます。

于 2012-09-11T14:29:13.307 に答える