0

EADemo の例を使用して Bluetooth アプリを開発しています。Bluetooth inputStream にデータがある場合は常に、次のイベントが呼び出されます。

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
    switch (eventCode) {
      case 1:
       //here I want to start two tasks
       break;

}

そして、並行して書き込みと読み取りを行う必要がある共通のキューがあります。キューは実際には NSMutuableArray です。書き込み部分ではaddobject:を使用 し、読み取り部分ではobjectAtIndex:0を使用します。

誰でもこれについてどのように動くか考えていますか?

4

1 に答える 1

0

同じアレイを使用しているため、安全にアクセスできるようにする必要があります。そうしないと、アプリがクラッシュする可能性があります

アプローチ A: (Grand Central Dispatch を使用)

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);//set priority as per requirement

//読んだ

dispatch_async(queue, ^{

                    while (//condition to stop)
                    {
                        //Perform read operation            
                    }
                });

//書く

dispatch_async(queue, ^{

                    while (//condition to stop)
                    {
                        //Perform write operation           
                    }
                });

//操作は同じキューで実行されるため、配列に安全にアクセスできます

アプローチ B: (スレッドの使用)

スレッドを 2 つ作成する

  1. スレッドを読む

  2. 踏面を書く

ただし、同期された方法でアレイにアクセスしてください。

于 2013-10-28T09:58:19.063 に答える