1

私はC ++で次のスレッドを使用して、特定の条件が満たされているかどうかを確認しています。満たされている場合は、ループを中断する必要があります。while ループでスレッドを呼び出すので、中断する必要があります。リフレッシュ トークンは別のスレッドによって更新されます。

void ThreadCheck( void* pParams )
{
  if(refresh)
  {
      continue;
  }
 }

私の while ループ:-

while(crun)
{
    refresh = false;
    _beginthread( ThreadCheck, 0, NULL );
    rlutil::setColor(8);
    cout<<"Send>> ";
    getline(cin, msg); //Make a custom function of this.
    if(stricmp(msg.c_str(), "exit")==0)
    { 
        crun = false;
    }
    else if(msg.empty() || stricmp(msg.c_str()," ")==0)
    {
       rlutil::setColor(4);
       cout<<"Plz enter a valid message!\n";

       continue;

    } else {
    manager('c', msg);
    // msg.append("\n");
    // chat_out<<msg;
    // chat_out.close();
        }
    cout<<"\n";
}
4

2 に答える 2

3

別のスレッドが値にアクセスしている、またはアクセスしている可能性がある場合、あるスレッドの値を変更することはできません。ロックなど、何らかの形式の同期を使用する必要があります。

于 2013-09-09T08:39:42.380 に答える
1

2 つのスレッドがあります: 1) メイン、2) ThreadCheck。「crun」を同時に更新しないようにミューテックスを追加し、スレッド内で値を false に更新します。それでおしまい

#include <iostream>
#include "/tbb/mutex.h"
#include "/tbb/tbb_thread.h"
using namespace tbb;

typedef mutex myMutex;
static myMutex sm;
int i = 0;

void ThreadCheck( ) 
{ 
      myMutex::scoped_lock lock;//create a lock
      lock.acquire(sm);//Method acquire waits until it can acquire a lock on the mutex
         //***only one thread can access the lines from here...***
        crun = false;;//update is safe (only one thread can execute the code in this scope) because the mutex locked above protects all lines of code until the lock release.
         sleep(1);//simply creating a delay to show that no other thread can update 
         std::cout<<"ThreadCheck "<<"\n";
         //***...to here***

      lock.release();//releases the lock (duh!)      
}

int main()
{
   tbb_thread my_thread(ThreadCheck);//create a thread which executes 'someFunction'

   // ... your code

   my_thread.join();//This command causes the main thread (which is the 'calling-thread' in this case) to wait until thread1 completes its task.

}
于 2013-09-09T08:45:56.747 に答える