Boost :: Thread: удаление потока из динамической группы?

0

Рассмотрим этот контекст:

Наличие группы потоков, выполняющих некоторую работу (работа в бесконечном цикле, внедренный проект), где количество потоков (и некоторых параметров) зависит от результата базы данных.

Мне нужно удалить или создать потоки из этой группы, когда есть изменения в базе данных.

Вот код:

for (result::const_iterator pin = pinesBBB.begin(); pin != pinesBBB.end(); ++pin)
{
    string pinStr = pin["pin"].as<string>();
    boost::thread hiloNuevo(bind(WorkPin, pinStr));
    Worker.add_thread(&hiloNuevo);
}

Где result pqxx::result из библиотеки pqxx.

Этот фрагмент кода выполняет итерацию таблицы из результата SQL-запроса и создает поток для каждой найденной записи.

После этого есть этот код, который проверяет одну и ту же таблицу каждые пару минут:

'

void ThreadWorker(boost::thread_group *worker, string *pinesLocales)
{
    int threadsVivosInt = worker->size();
    string *pinesDB;
    int contador;
    for (;;)
    {
        contador = 0;
        sleep(60);
        try
        {
            result pinesBBB = TraerPines();
            for (result::const_iterator pin = pinesBBB.begin(); pin != pinesBBB.end(); ++pin)
            {
                pinesDB[contador] = pin["pin"].as<string>();
                contador++;
            }
            thread hiloMuerto
        }
        catch (...)
        {
            sleep(360);
        }
    }
}

'

Я хочу сделать доступ к этому worker thread_group и удалить один из этих потоков.

Я пробовал использовать индекс Int как worker[0] и с идентификатором boost::thread::id

Я могу удалить поток с помощью native_handle а затем использовать такую форму, как pthread_cancel но я не могу получить поток из группы потоков.

Есть идеи? Благодарю!

Теги:
multithreading
boost

1 ответ

0

boost :: thread_group :: remove_thread() удаляет указанный поток из заданного потока_группы. Как только вы это сделаете, вы теперь отвечаете за управление потоком.

  • 0
    Да, но единственный способ найти поток из этой группы - передать указатель потока. Я не могу найти тему по индексу или идентификатору.
  • 0
    Если это так, то вам нужно сохранить указатель на каждый поток во вторичном контейнере, который проиндексирован соответствующим образом. Когда у вас есть идентификатор / индекс потока, который вы хотите удалить, найдите его в своем индексе, а затем удалите его из группы потоков.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню