【问题标题】:Translation from <pthread.h> to <boost/thread.hpp>从 <pthread.h> 到 <boost/thread.hpp> 的翻译
【发布时间】:2014-04-24 15:52:36
【问题描述】:

你能帮我把 pthread 库中的以下方法翻译成 boost 库吗:

pthread_t tid; // I guess this should become : boost::thread tid; 
//... some instructions ...

pthread_create(&tid, NULL, (void*(*)(void*))process_request, (void*)some_ptr); 

void *process_request(void *soap) 
{ 
   pthread_detach(pthread_self()); 
   //... some instructions ...
   return NULL; 
}

非常感谢!

【问题讨论】:

  • 你要的是仙女和独角兽!没有办法翻译,这些是完全不同的 API!
  • 这个问题似乎是题外话,因为它是关于要求不可行的事情。
  • @πάνταῥεῖ 您是否对 OP 没有显示他所做的事情感到恼火,或者您是否不知道 Boost Thread 实际上是 C++11 &lt;thread&gt; 支持的前影?
  • 我很清楚 Boost Thread 库是什么。我很生气,因为将 C-API 与 C++-API 进行比较将是一种笨拙的方法。好吧,但是您的回答似乎与此相矛盾;)。
  • @GotACrushOnIT 我很高兴你这么说,因为从线程函数中分离不属于那个“正确的翻译”:)

标签: c++ multithreading boost pthreads


【解决方案1】:

很简单:

boost::thread(&process_request, some_ptr).detach();

您可以将boost 替换为std,并且您的程序在c++11 中是可移植的。

请注意,process_request 现在实际上可以采用参数强类型。如果您想传递参考,请使用boost::ref(或std::ref,实际上):

void process_request(MyData& data)
{
}

MyData data;
boost::thread th(&process_request, boost::ref(data));
th.join();

不过,在 C++11 中,将数据移动到线程函数中是一种模式,以避免传递参数的竞争:

void process_request(MyData&& data)
{
}

MyData data;
boost::thread th(&process_request, std::move(data));
th.join();

【讨论】:

  • 您好!首先感谢您的回答! +1。好吧,我仍然有一些困惑:如何在 process_request 定义中调用 detach() 方法?另外,不是使用构造函数来设置 &process_request... 有没有分配的方法?因为我必须在其他地方声明 th。非常感谢!
  • 当然,声明和赋值都是分开的,线程函数内部是分离的:Live On Coliru。免责声明:我认为 both 都是坏主意。使用 thread_group,加入 > 分离。
  • 完美!明天我会给你一个赏金来区分你有用的答案!
  • 而且我认为您最好编辑您的答案并将您所做的内容嵌入链接中......对于那些有相同需求并阅读您的答案的人来说,要明确表示清楚。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-09-02
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2021-04-20
相关资源
最近更新 更多