小编Tro*_*nic的帖子

基于Boost.ASIO的HTTP客户端库(如libcurl)

我正在寻找一个现代的C++ HTTP库,因为libcurl的缺点很难被C++包装器解决.基于Boost.ASIO的解决方案已成为事实上的C++ TCP库,因此是首选.

c++ curl http boost-asio

60
推荐指数
4
解决办法
5万
查看次数

捕获DLL引发的异常

当异常退出DLL中的函数时,mingw32运行时只调用terminate std :: unexpected而不是将异常传播给调用DLL的代码.这个问题有什么解决方案?DLL和调用它的应用程序都使用相同的编译器进行编译.

mingw32支持两种不同的异常机制:SJLJ和Dwarf2.他们中的一个应该比另一个更好吗?也许唯一的选择是切换到MSVC或ICC或者单独更改构建选项会有帮助吗?

请注意,即使catch(...)也不会捕获任何异常,甚至不是内置类型(throw 1;),因此它与异常类型的可见性无关.

c++ dll exception

11
推荐指数
2
解决办法
1619
查看次数

通过指向const的指针释放内存是一个好习惯

有许多问题讨论了处理指针到const删除的C和C++的细节,即free()不接受它们的那些deletedelete[]那样做,并且该const不会阻止对象破坏.

我感兴趣的是你是否认为这是一个好习惯,而不是语言(C和C++)允许的.

指针到const删除的参数包括:

  • kfree()与C's不同free(),Linus Torvalds 采取了一种void const*观点,因为他认为释放记忆不会影响指向的内容.
  • free() 是在引入const关键字之前设计的.
  • C++的删除操作符允许删除const数据.

反对它的论据包括:

  • 程序员在向指针传递指针时不希望修改(或删除)数据.
  • 许多人认为指针指向const意味着没有获得数据的所有权(但不是非const意味着获得所有权).
  • 这是大多数库和现有代码中常见的做法.

请在您的回复中充分说明,并可能参考当局.我的意图不是在这里开始民意调查.

c c++ memory-management const-correctness

10
推荐指数
1
解决办法
933
查看次数

用最少量的代码实现pImpl

可以使用哪种技巧来最小化实现pImpl类的工作量?

标题:

class Foo {
    struct Impl;
    boost::scoped_ptr<Impl> self;
public:
    Foo(int arg);
    ~Foo();
    // Public member functions go here
};
Run Code Online (Sandbox Code Playgroud)

执行:

struct Foo::Impl {
    Impl(int arg): something(arg) {}
    // All data members and private functions go here
};

Foo::Foo(int arg): self(new Impl(arg)) {}
Foo::~Foo() {}

// Foo's public functions go here (and they refer to data as self->something)
Run Code Online (Sandbox Code Playgroud)

您如何使用Boost,可能继承,CRTP或其他技巧来避免尽可能多的样板代码?运行时性能不是问题.

c++ boost pimpl-idiom

10
推荐指数
1
解决办法
2190
查看次数

使用开源媒体服务器捕获Flash网络摄像头/麦克风

从Flash捕获视频需要一个媒体服务器,但它们似乎都没有任何可用的文档(甚至没有API文档或其他源代码注释).我更喜欢crtmpserver,因为我的应用程序是用C++编写的,它需要实时接收和处理捕获的数据.但是,Red5显然是一个更成熟,更知名的项目,所以我也考虑了这个选项.Adobe FMS太昂贵,可能很难与我的应用程序集成,因为Adobe从未提及过这样的用例.

据我所知,必须为媒体服务器编写一个"应用程序"(它们没有附带任何可用的东西),然后必须转发数据以进行实际处理.应用程序可以从媒体服务器获得什么样的数据,它是一个普通的FLV流还是还有更多的东西(带宽协商等)?

编写Flash方面不是问题,有很多例子(即使他们没有说明应该如何构建媒体服务器URL).

实际问题:服务器端如何工作(高级视图),是否有任何东西可以从实时捕获功能开始?

flash video-capture flash-media-server

9
推荐指数
1
解决办法
3640
查看次数

使用setjmp在C++对象上警告"可能会被破坏"

#include <setjmp.h>
#include <vector>

int main(int argc, char**) {
 std::vector<int> foo(argc);
 jmp_buf env;
 if (setjmp(env)) return 1;
}

用GCC 4.4.1编译上面的代码,g ++ test.cc -Wextra -O1,给出了这个令人困惑的警告:

/usr/include/c++/4.4/bits/stl_vector.h: In function ‘int main(int, char**)’:
/usr/include/c++/4.4/bits/stl_vector.h:1035: warning: variable ‘__first’ might be clobbered by ‘longjmp’ or ‘vfork’

stl_vector.h的第1035行是在构造foo时调用的vector(n,value)构造函数使用的辅助函数中.如果编译器可以找出参数值(例如它是一个数字文字),警告就会消失,所以我在这个测试用例中使用了argc,因为编译器无法确定它的值.

我猜这个警告可能是因为编译器优化了向量构造,所以它实际上发生在setjmp着陆点之后(当构造函数参数依赖于函数的参数时,这似乎就是这种情况).

我怎样才能避免这个问题,最好不必将setjmp部分分解为另一个函数?

不使用setjmp不是一个选项,因为我遇到了一堆需要使用它来进行错误处理的C库.

c++ longjmp

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

找到OpenGL垂直回扫时序

我的应用程序执行快速渲染(通常每帧1-6毫秒),启用双缓冲并同步到vblank.在我的主循环,我要睡了大约10毫秒,然后看了一些实时输入并执行渲染尽可能晚地,同时还管理更新的截止时间(固体60 FPS的渲染以最小的延迟)之前的帧.

我可以在交换缓冲区之后使用glFinish但不幸的是在某些系统上(至少是Linux非合成),这似乎不仅要等到下一次缓冲区交换,而是等待图像被发送出HDMI端口(在该范围内总等待) 25毫秒,应用程序以30 FPS运行).在其他系统上(Linux编译),这种方法很好.没有glFinish更多的工作被缓冲,导致更长的延迟,所以这也不好.

我有什么选择可以获得更精确的帧定时?主要平台是Windows,Linux和OS X.

c opengl

5
推荐指数
1
解决办法
481
查看次数

如何在OpenGL中启用VSYNC

WGL_EXT_swap_control扩展允许在Windows上执行此操作,但我无法找到任何远程跨平台执行相同操作,即同步我的缓冲区交换与屏幕刷新.我的应用程序使用GLEW,所以提供的东西更可取.对Linux,Mac和Windows的跨平台支持是必要的,但如果无法设置同步,我的应用程序将不会中断(例如,用户已将其强制关闭在其图形驱动程序中).

我将接受程序代码在许多平台上使用GLEW作为有效答案.

c++ opengl vertical-sync vsync

3
推荐指数
1
解决办法
9225
查看次数

帮助在C++中通过http流式传输

我希望使用提供流式API的网络服务.这个api通常可以由java方法java.net.URL.openStream();

问题是我正在尝试用C++设计我的程序,并且不知道使用什么库(我听说cUrl库非常擅长这种东西),或者如何使用它们来做我想要的.

我们的想法是,在将文件作为流打开后,我可以实时访问不断更新的数据.

任何帮助将非常感激.

c++ streaming curl boost-asio

3
推荐指数
1
解决办法
7543
查看次数