Где взять простой пример Boost Thread Management? - PullRequest
1 голос
/ 05 ноября 2010

Итак, у меня есть простой файл cpp. Только один с одной основной функцией и 3 открытыми переменными типа а-ля. как:

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

Я хочу создать 2 th A и B, одна из которых должна генерировать случайное значение для A и другое случайное значение для b. Как это сделать?

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

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

#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 голосов
/ 05 ноября 2010

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

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

Многопоточность в C ++ 0x. Часть 1. Запуск потоков

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

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

Многопоточность в C ++ 0x. Часть 4. Защита общих данных

Многопоточность в C ++ 0x. Часть 5. Гибкая блокировка с помощью std :: unique_lock <>

Многопоточность в C ++ 0x, часть 6: отложенная инициализация и двойная проверка блокировки с атомарными элементами

Многопоточность в C ++ 0x, часть 7. Блокировка нескольких мьютексов без взаимоблокировки

Многопоточность в C ++ 0x, часть 8. Фьючерсы, обещания и асинхронные вызовы функций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...