标签: boost-thread

如何在c ++中使用boost实现与信号量类似的东西?

我注意到提升似乎不支持信号量.获得类似效果的最简单方法是什么?

c++ multithreading boost boost-thread boost-interprocess

8
推荐指数
2
解决办法
2万
查看次数

何时分离或加入提升线程?

我有一个方法,每30秒aprox发射一次.我需要一个线程.

我有一个方法,我可以从课外调用.像callThreadedMethod()这样的东西,它创建自己调用最终的threadedMethod的线程.

这些是MyClass的方法

void callThreadedMethod(){
    mThread = boost::shared_ptr<boost::thread>(new boost::thread(&MyClass::threadedMethod, this));
}

void threadedMethod(){
    //more code NOT inside a while loop
}
Run Code Online (Sandbox Code Playgroud)

那么每次调用方法时我都必须分离mThread吗?

在MyClass析构函数中调用join()是否足够?

threadMethod完成后,线程是否会自行销毁?

c++ multithreading boost-thread

8
推荐指数
1
解决办法
9260
查看次数

对于带有单个接受器的线程boost :: asio服务器,我们是否需要每个线程有多个io_service

我没经验丰富boost::asio.我有一些非常基本的问题.

我需要有一个不同io_service,并且不同的socket根据不同thread,但一个单一的acceptor,要处理客户端的螺纹服务器?

我相信我必须为新客户提供不同的套接字.但是如果所有线程使用相同的线程io_service会是并行吗?

我在asio部分通过http://en.highscore.de/cpp/boost/index.html说我需要在不同的线程中使用不同的io_services来实现并行化.

我是否计划创建一个Server类,new TCPsession每次出现一个新客户端时创建一个,acceptor.async_accept
并且TCPSessionctor创建一个io_service和一个threadio_service.run()在其自己的线程中运行它会是一个好的设计吗?

但是在这个设计中我会加入所有这些线程吗?我是否需要另一个io_service,main以便即使在获得新客户之前它也不会终止?

c++ sockets boost boost-thread boost-asio

8
推荐指数
1
解决办法
7371
查看次数

突破Boost.Thread 3.0.0中的变化

在Boost库1.50.0版的发行说明中,我注意到两个重大变化(见这里):

#6266断开变化:如果可连接,线程析构函数应该调用terminate.

#6269中断更改:线程移动分配应该在可连接时调用terminate.

这对我目前使用Boost 1.49.0的现有项目意味着什么?我需要改变什么吗?如果是的话,我该怎么做才能完全改变?如果我忘记修改我现有的一个项目会怎样?我是否会遇到编译时错误(我希望如此)或者我会遇到令人讨厌且难以发现的运行时问题(我绝对不希望如此)?

c++ boost boost-thread

8
推荐指数
2
解决办法
339
查看次数

提升asio异步等待条件变量

是否可以对boost :: asio中的条件变量执行异步等待(读取:非阻塞)?如果没有直接支持,任何有关实施它的提示将不胜感激.

我可以实现一个计时器,甚至每隔几毫秒启动一次唤醒,但这种方法非常低劣,我发现很难相信条件变量同步没有实现/记录.

c++ pthreads boost-thread boost-asio concurrent-programming

7
推荐指数
1
解决办法
4687
查看次数

使用Boost.Thread编译C++源文件

我正在尝试学习如何使用C++ Boost.Thread库.我在我的Ubuntu 11.10系统上安装了Boost库.我正在阅读Schaling的"The Boost C++ Libraries"一书 - 特别是第66页的示例6.1.我正在尝试编译以下代码示例:

#include <boost/thread.hpp>
#include <iostream>

void wait(int seconds)
{ 
  boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}

void thread()
{
  for(int i = 0; i < 5; ++i)
  {
    wait(1);
    std::cout << i << std::endl;
  }
}

int main() 
{
  boost::thread t(thread);
  t.join();
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从命令行使用以下代码编译它时:

$ g++ example61.cpp -o example61 -I /usr/local/include
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

/tmp/cc6bVu1F.o: In function `main':
example6.cpp:(.text+0x9d): undefined reference to `boost::thread::join()'
example6.cpp:(.text+0xae): undefined reference to `boost::thread::~thread()'
example6.cpp:(.text+0xc6): undefined reference to `boost::thread::~thread()'
/tmp/cc6bVu1F.o: In function `boost::detail::thread_data_base::thread_data_base()':
example6.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x24): undefined reference …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-thread

7
推荐指数
1
解决办法
1万
查看次数

提升线程和UPX压缩==无效的win32应用程序?

我什么时候宣布

boost::thread t1, t2;
Run Code Online (Sandbox Code Playgroud)

在我的程序中然后使用UPX压缩.exe文件,压缩成功.但是当我尝试启动压缩的exe时,Windows告诉我它是"无效的win32应用程序".

UPX有一个错误报告(类似的错误),但它有不同的错误消息("应用程序无法正确初始化(0xc0000005)").

在我的情况下,操作系统认为文件已损坏或其他东西,所以它甚至无法启动显示错误!为什么??

Win7x64,C++,VisualStudio,boost 1.47,UPX3.07

奇怪的消息:

  1. 解包exe会使损坏的exe抛出与此处完全相同的错误.("应用程序无法正确初始化(0xc0000005)")这是针对解压缩的exe,而不是在bug报告中打包.

  2. extern "C" void tss_cleanup_implemented(void) {} 在包含boost的线程头之前并不重要.结果是一样的.

main.cpp中:

#include <boost/thread.hpp>

int main(int argc, char** argv)
{
    boost::thread t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

可能有人会尝试编译和压缩?

c++ boost boost-thread upx visual-studio

7
推荐指数
1
解决办法
704
查看次数

C++/Cli:无法加载文件或程序集X或其依赖项之一.不是有效的Win32应用程序.(HRESULT异常:0x800700C1)

我有一个C++项目,一个C++\Cli项目和一个ac#win forms项目.
当我从win forms项目访问cli项目时,我可以访问和使用cli项目功能.但是当我将我的cpp项目头包含到cli项目中时,当我访问cli项目时,我从c#项目中得到这个运行时错误.

  CliWrapper.Func meta = new CliWrapper.Func();
Run Code Online (Sandbox Code Playgroud)

这是我犯的错误:

BadImageFormatException:无法加载文件或程序集X或其依赖项之一.不是有效的Win32应用程序.(HRESULT异常:0x800700C1)

我意识到#include <boost/thread.hpp>导致问题

boost c++-cli boost-thread

7
推荐指数
1
解决办法
3882
查看次数

boost :: threads示例和堆损坏消息

我对boost :: threads很新,我阅读了文档,但是我在实践中应用它时遇到了一些麻烦,也许你可以帮忙吗?首先,我花时间编写了一个自包含的代码清单,演示了两种我无法理解的行为......

该程序允许用户发出3个不同的命令,

  • 任务名称]
  • 信息
  • 放弃

目的是任务将在新线程上启动一些工作,但在执行工作时返回到命令提示符.用户可以使用info命令找出哪些任务已完成,哪些未完成.

我使用双核Win7机器和Visual Studio 2008 Express.

问题1>

发出命令,任务p1 p2 p3,启动3个任务正在运行.这可以通过发布信息来检查.几秒钟后,工作完成,但由于某种原因,完成的标志并不总是在1或2个任务上设置为true.

问题2>

退出程序然后生成以下消息:

Windows在example.exe中触发了断点.这可能是由于堆的损坏,这表示example.exe或它已加载的任何DLL中的错误.这也可能是由于用户在example.exe具有焦点时按下F12.输出窗口可能包含更多诊断信息.

希望您可以重现此行为并提供帮助.

提前致谢.亚历克斯.

    //WARNING: THIS CODE DOES NOT BEHAVE EXACTLY AS INTENDED
#include <iostream>  
#include <string>
#include <sstream>
#include <boost/thread.hpp>  

using namespace std;

class task {
public:
    string mname;
    bool completed;
    void start()
    {
        int a = 0;
        for (int i=0 ; i<10000; i++)
        {
            for (int j=0 ; j<100000; j++)
            {
                a= i*2; …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading boost-thread threadgroup heap-corruption

7
推荐指数
1
解决办法
1051
查看次数

如何杀死或终止一个提升线程

我想终止或杀死提升线程.代码在这里:

DWORD WINAPI  StartFaceDetector(LPVOID temp)
{   
    int j=0;
    char **argv1;
    QApplication a(j,argv1);//add some thread here  
    gui::VisualControl w;
    t=&w;
    boost::thread u(&faceThread);       
    w.show();
    a.exec();
    // I Want to close u thread here.   
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

我想在返回函数之前关闭该boost线程.提前致谢.

c++ qt boost boost-thread visual-studio

7
推荐指数
2
解决办法
2万
查看次数