考虑这个背景:
让一组线程做一些工作(工作在无限循环,嵌入式项目中),其中线程数(和一些参数)取决于数据库结果。
我需要的是在数据库发生更改时从该组中删除或创建线程。
以下是代码:
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
这样的平台,但我无法从线程组中获取线程。
有什么想法吗?谢谢!
答案 0 :(得分:0)
boost :: thread_group :: remove_thread()从给定的thread_group中删除指定的线程。完成此操作后,您现在负责管理线程。