2010-11-05 2 views
1

Итак, у меня есть простой файл cpp. Только один с одной главной функцией и 3 общедоступными переменными a-la. как:Где можно получить простой пример управления потоком Boost?

int a; 
    int b; 
    int c; 
    void main() 
    { 
     startThredA(); 
     startThredB(); 
     while(1) 
    { 
     c = a + b; 
     printf(c); 
    } 
    } 

Я whant, чтобы создать 2 threds А и В, один из которых должен генерировать случайное значение А и другое случайное значение б. Как это сделать?

+2

Это 'int main', а не' void'. – GManNickG

+0

Какую часть документа [Boost.Thread] (http://www.boost.org/doc/libs/1_44_0/doc/html/thread/thread_management.html) вы не понимаете? –

+0

@Sam - Я не понимаю, где именно список функций и классов без каких-либо примеров. Это едва ли модель ясности, что делает планку для входа выше, чем она должна быть. –

ответ

3

Вот небольшой и простой пример. Он пробовал и, похоже, работает нормально.

#include <iostream> 
#include <boost/thread.hpp> 

namespace this_thread = boost::this_thread; 

int a = 0; 
int b = 0; 
int c = 0; 

class BaseThread 
{ 
public: 
    BaseThread() 
     { } 
    virtual ~BaseThread() 
     { } 

    void operator()() 
    { 
     try 
     { 
      for (;;) 
      { 
       // Check if the thread should be interrupted 
       this_thread::interruption_point(); 

       DoStuff(); 
      } 
     } 
     catch (boost::thread_interrupted) 
     { 
      // Thread end 
     } 
    } 

protected: 
    virtual void DoStuff() = 0; 
}; 

class ThreadA : public BaseThread 
{ 
protected: 
    virtual void DoStuff() 
    { 
     a += 1000; 
     // Sleep a little while (0.5 second) 
     this_thread::sleep(boost::posix_time::milliseconds(500)); 
    } 
}; 

class ThreadB : public BaseThread 
{ 
protected: 
    virtual void DoStuff() 
    { 
     b++; 
     // Sleep a little while (0.5 second) 
     this_thread::sleep(boost::posix_time::milliseconds(100)); 
    } 
}; 

int main() 
{ 
    ThreadA thread_a_instance; 
    ThreadB thread_b_instance; 

    boost::thread threadA = boost::thread(thread_a_instance); 
    boost::thread threadB = boost::thread(thread_b_instance); 

    // Do this for 10 seconds (0.25 seconds * 40 = 10 seconds) 
    for (int i = 0; i < 40; i++) 
    { 
     c = a + b; 
     std::cout << c << std::endl; 

     // Sleep a little while (0.25 second) 
     this_thread::sleep(boost::posix_time::milliseconds(250)); 
    } 

    threadB.interrupt(); 
    threadB.join(); 

    threadA.interrupt(); 
    threadA.join(); 
} 
2

Существует ряд статей starting here, которые должны дать вам некоторые начальные указатели. Писатель несет основную ответственность за то, что он набирает boost.thread в C++ 0x.

Список статей:

Многопоточность в C++ 0x Часть 1: Начало Темы

Многопоточность в C++ 0x Часть 2: Запуск темы с функцией объектов и аргументы

Многопоточность в C++ 0x Часть 3: Запуск темы с функциями членов и справочных Аргументы

Многопоточность в C++ 0x Часть 4: Защита Shared Data

Многопоточность в C++ 0x Часть 5: Гибкий замок с стандом :: unique_lock <>

Многопоточности в C++ 0x часть 6: Ленивая инициализация и перепроверены замок с Атомиксом

Многопоточностью в C + + 0x часть 7: Блокировка несколько семафоров без тупиковой

многопоточности в C++ 0x часть 8: фьючерсы, Обещание и асинхронные вызовы функции

Смежные вопросы