我正在寻找一个现代的C++ HTTP库,因为libcurl的缺点很难被C++包装器解决.基于Boost.ASIO的解决方案已成为事实上的C++ TCP库,因此是首选.
当异常退出DLL中的函数时,mingw32运行时只调用terminate std :: unexpected而不是将异常传播给调用DLL的代码.这个问题有什么解决方案?DLL和调用它的应用程序都使用相同的编译器进行编译.
mingw32支持两种不同的异常机制:SJLJ和Dwarf2.他们中的一个应该比另一个更好吗?也许唯一的选择是切换到MSVC或ICC或者单独更改构建选项会有帮助吗?
请注意,即使catch(...)也不会捕获任何异常,甚至不是内置类型(throw 1;),因此它与异常类型的可见性无关.
有许多问题讨论了处理指针到const删除的C和C++的细节,即free()
不接受它们的那些delete
和delete[]
那样做,并且该const不会阻止对象破坏.
我感兴趣的是你是否认为这是一个好习惯,而不是语言(C和C++)允许的.
指针到const删除的参数包括:
kfree()
与C's不同free()
,Linus Torvalds 采取了一种void const*
观点,因为他认为释放记忆不会影响指向的内容.free()
是在引入const关键字之前设计的.反对它的论据包括:
请在您的回复中充分说明,并可能参考当局.我的意图不是在这里开始民意调查.
可以使用哪种技巧来最小化实现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或其他技巧来避免尽可能多的样板代码?运行时性能不是问题.
从Flash捕获视频需要一个媒体服务器,但它们似乎都没有任何可用的文档(甚至没有API文档或其他源代码注释).我更喜欢crtmpserver,因为我的应用程序是用C++编写的,它需要实时接收和处理捕获的数据.但是,Red5显然是一个更成熟,更知名的项目,所以我也考虑了这个选项.Adobe FMS太昂贵,可能很难与我的应用程序集成,因为Adobe从未提及过这样的用例.
据我所知,必须为媒体服务器编写一个"应用程序"(它们没有附带任何可用的东西),然后必须转发数据以进行实际处理.应用程序可以从媒体服务器获得什么样的数据,它是一个普通的FLV流还是还有更多的东西(带宽协商等)?
编写Flash方面不是问题,有很多例子(即使他们没有说明应该如何构建媒体服务器URL).
实际问题:服务器端如何工作(高级视图),是否有任何东西可以从实时捕获功能开始?
#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库.
我的应用程序执行快速渲染(通常每帧1-6毫秒),启用双缓冲并同步到vblank.在我的主循环,我要睡了大约10毫秒,然后看了一些实时输入并执行渲染尽可能晚地,同时还管理更新的截止时间(固体60 FPS的渲染以最小的延迟)之前的帧.
我可以在交换缓冲区之后使用glFinish但不幸的是在某些系统上(至少是Linux非合成),这似乎不仅要等到下一次缓冲区交换,而是等待图像被发送出HDMI端口(在该范围内总等待) 25毫秒,应用程序以30 FPS运行).在其他系统上(Linux编译),这种方法很好.没有glFinish更多的工作被缓冲,导致更长的延迟,所以这也不好.
我有什么选择可以获得更精确的帧定时?主要平台是Windows,Linux和OS X.
WGL_EXT_swap_control扩展允许在Windows上执行此操作,但我无法找到任何远程跨平台执行相同操作,即同步我的缓冲区交换与屏幕刷新.我的应用程序使用GLEW,所以提供的东西更可取.对Linux,Mac和Windows的跨平台支持是必要的,但如果无法设置同步,我的应用程序将不会中断(例如,用户已将其强制关闭在其图形驱动程序中).
我将接受程序代码在许多平台上使用GLEW作为有效答案.
我希望使用提供流式API的网络服务.这个api通常可以由java方法java.net.URL.openStream();
问题是我正在尝试用C++设计我的程序,并且不知道使用什么库(我听说cUrl库非常擅长这种东西),或者如何使用它们来做我想要的.
我们的想法是,在将文件作为流打开后,我可以实时访问不断更新的数据.
任何帮助将非常感激.