Boost :: Thread:从动态组中删除线程?

时间:2014-12-05 13:36:04

标签: c++ multithreading boost

考虑这个背景:

让一组线程做一些工作(工作在无限循环,嵌入式项目中),其中线程数(和一些参数)取决于数据库结果。

我需要的是在数据库发生更改时从该组中删除或创建线程。

以下是代码:

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);
}

来自pqxx库的result pqxx::result

这段代码从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);
        }
    }
}

`

我想要做的是访问此thread_group worker并删除其中一个主题。

我尝试使用像worker[0]这样的Int索引,并使用线程ID boost::thread::id

我可以使用native_handle删除线程,然后使用像pthread_cancel这样的平台,但我无法从线程组中获取线程。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

boost :: thread_group :: remove_thread()从给定的thread_group中删除指定的线程。完成此操作后,您现在负责管理线程。