Articles of c ++ 11

dynamicreplace正在播放的gstreamerpipe道中的元素

我正在寻找正确的技术,如果有的话,dynamicreplace正在运行的gstreamerpipe道中的元素。 我有一个基于gstreamer的c + +应用程序,它创build的pipe道看起来像这样(使用gst-launch语法): souphttpsrc location =“http://localhost/local.ts”! mpegtsdemux name = d! 排队! mpeg2dec! xvimagesink d。 ! 排队! a52dec! pulsesink 在播放过程中(即GST_STATE_PLAYING是pipe道状态,用户正在欣赏video),我需要从pipe道中删除souphttpsrc,并创build一个新的souphttpsrc,甚至是一个新的霓虹灯源,然后立即将其添加回pipe道并在我们执行此操作之前的同一时间位置处继续播放相同的uri源码stream。 用户可能会看到一个小延迟,这很好。 我们几乎不知道如何删除和replace源代码,我们需要更多的理解。 这是我们迄今为止最好的尝试: gst_element_unlink(source, demuxer); gst_element_set_state(source, GST_STATE_NULL); gst_bin_remove(GST_BIN(pipeline), source); source = gst_element_factory_make("souphttpsrc", "src"); g_object_set(G_OBJECT(source), "location", url, NULL); gst_bin_add(GST_BIN(pipeline), source); gst_element_link(source, demuxer); gst_element_sync_state_with_parent(source); 这并不完美,因为源从头开始播放,其余的pipe道正在等待正确的时间戳缓冲区(我假设),因为几秒钟后,播放select备份。 我试图以多种方式寻找来源,但没有任何工作。 我需要知道正确的方法来做到这一点。 如果我们想要dynamic地replace解码器或其他元件,那么知道一种通用技术(如果存在的话)也是很好的。 谢谢

在linux下testing一个程序的性能的最好方法是什么?

假设我编写了一个程序,然后我为代码做了一些“优化”。 在我的情况下,我想testing新functionstd::move在C ++ 11中可以提高程序的性能。 我想检查一下“优化”是否有意义。 目前我通过以下步骤testing它: 编写一个程序(不需要std::move ),编译得到二进制文件m1 优化它(使用std::move ),编译,获取二进制文件m2 使用命令“time”来比较耗时: time ./m1 ; time ./m2 编辑: 为了得到统计结果,需要运行testing数千次。 有没有更好的方法来做到这一点,或者有一些工具可以帮助吗?

在旧版本的linux上运行我的代码

我是Linux编程的新手,我想知道,是否有一种方法可以在相同发行版的较早版本的Linux上运行(不重新编译)我的C ++可执行文件? 例如:说我在RHEL 6上编译我的代码,并想在RHEL 4或5上运行我的可执行文件。 在Windows中,当我们这样做时,我们只安装C ++编译器版本的C ++运行时。 示例:如果我使用VS2012来构build一个使用C ++ 11的C ++项目,我只需要在客户端机器上安装C ++ 11的C ++运行库来运行我的应用程序,而不pipe我使用的是哪个版本的Windows(当然从Windows XP开始)

使用PostgreSQL连接器安装SQLpp11

如何在Linux上安装SQLpp11与PostgreSQL连接器? 我使用Linux Mint 17.2,Eclipse CDT,我已经安装了PostgreSQL 9.4。 我知道,这是微不足道的,但我第一次这样做。 我是新手。 GitHub存储库: https://github.com/rbock/sqlpp11 https://github.com/matthijs/sqlpp11-connector-postgresql

一些显式的实例不是在G ++中生成的

我正在build立一个库,它处理几种不同types的二进制“语言”,每种语言都有一个“处理器”types。 该库build立良好,我到目前为止的范围缩小到以下模板代码: // Processor.h template <class A, class B = DefaultProcessor> class Processor { public: // Default constructor. Processor(void); // Constructor from DefaultProcessor pointer type. Processor(B* pB); virtual ~Processor(void){}; // Dereferencing operator A* operator->(void) const; private: A* pRawPointer; }; // Processor.cpp template <class A, class B> A* Processer<A, B>::operator->(void) const { if (nullptr == pRawPointer) […]

GCC c ++ 11使用大量的RAM,STL位集<UINT_MAX>

在今天编写我的程序的时候,我注意到GCC的内存消耗模式(编译步骤)中有一些很奇怪的东西(我敢肯定可以解释)。 称为“cc1plus”的进程使用大约10 GB的RAM,用于less于10000行代码的程序。 在评论和取消注释代码行后,我终于find了“罪魁祸首”: std::bitset<UINT_MAX> 如果你想testing自己,请尝试这个很短的程序: #include <iostream> #include <bitset> #include <climits> std::bitset<UINT_MAX> justAVar; int main() { std::cout << UINT_MAX << std::endl; return 0; } 使用-std = c ++ 11或-std = c ++ 0x编译它,请注意,即使这个小例子在编译时也会使用大量的RAM(在我的例子中gcc和gcc都是7 GB) )所以如果你不得不按下重置button,不要抱怨和诅咒神像你没有被警告过。 我的testing机器: 设置1:Debian 7.0 64,gcc 4.8.1 设置2:Ubuntu 12.04 64,gcc 4.7.3,gcc 4.8.1,铿锵3.0.6(最后一个使用-std = c ++ 0x ) 关于bitset构造函数的实现的一个提示(很明显,如果是C ++ 11和C ++ […]

在Linux中构buildC ++ 11可线程转换单元

给定一个使用C ++ 11线程特性的简单程序: #include <iostream> #include <thread> using namespace std; void dont_thread_on_me() { cout << "action from another thread" << endl; } int main() { thread t { dont_thread_on_me }; t.detach(); cin.get(); } 如果我使用以下方法构build应用 c++ -std=c++11 Program.cpp -o Program.out 该程序生成的罚款,但是当我运行它,我得到: ./Program.out terminate called after throwing an instance of 'std::system_error' what(): Operation not permitted Aborted 如果我使用-pthread构build它,如下所示: […]

并发问题在C + + 11

最近我在c ++ 11中学习了multithreading库。 我认为这样的情况是有一个全局variablesint x = 0,并且有两个独立的线程在两个独立的核心中运行。 两个线程是否可以同时写入x的内存? 例如在线程#1让x = 0x0000,int线程#2让x = 0xffff,可能x是一些无效的值0x00ff? 我已经用g ++ clang msvc在x86-64 linux(windows)上testing了它,答案是否定的,x的值是0x0000或0xffff。 它看起来像分配操作是primefaces或者只是巧合。 有人可以帮助我吗?

select()系统调用和bash转义

当我用g++ -std=c++11 <filename>编译并运行下面的代码,并运行./a.out并input一些文本来查看select调用将返回的内容(它应该返回1,因为当我input文字,然后可以读入文字)。 不知何故,我input的文本作为bash命令本身。 有人能解释为什么发生这种情况 #include <errno.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/time.h> int input_timeout (int filedes, unsigned int seconds) { fd_set set; struct timeval timeout; // Initialize the file descriptor set. FD_ZERO (&set); FD_SET (filedes, &set); // Initialize the timeout data structure. timeout.tv_sec = seconds; timeout.tv_usec = 0; // select returns 0 […]

getrusage不工作,因为我所期望的

我正在尝试使用以下代码通过getrusage系统调用来测量subprocess使用的内存量 #include <iostream> using std::cout; using std::endl; #include <unistd.h> #include <thread> #include <chrono> #include <sys/wait.h> #include <sys/time.h> #include <sys/resource.h> #include <cassert> #include <vector> int main() { auto child_pid = fork(); if (!child_pid) { cout << "In child process with process id " << getpid() << endl; cout << "Child's parent process is " << getppid() […]