草庐IT

缓冲区

全部标签

c++ - 覆盖最旧数据的 C/C++ 无锁(或非阻塞)环形缓冲区?

我正在尝试找到一种方法来制作无锁或非阻塞的方法来为单个消费者/单个消费者制作环形缓冲区,该缓冲区将覆盖缓冲区中最旧的数据。我读过很多无锁算法,这些算法在缓冲区已满时“返回false”时起作用——即,不要添加;但我什至找不到伪代码来讨论当你需要覆盖最旧的数据时如何做。我正在使用GCC4.1.2(工作限制,我无法升级版本...)并且我有Boost库,过去我制作了自己的Atomic变量类型接近即将到来的规范(它并不完美,但它是线程安全的并且可以满足我的需要)。当我想到它时,我认为使用这些原子应该真正解决这个问题。关于我在想什么的一些粗略的伪代码:templateclassRingBuffer

c++ - 从内存缓冲区处理视频流

我需要从专有网络协议(protocol)(我已经知道该怎么做)解析视频流(mpegts),然后我想使用OpenCV将视频流处理成帧。我知道如何从文件或标准URL使用cv::VideoCapture,但我想将OpenCV设置为从内存中的缓冲区读取,我可以在需要时存储视频流数据。有没有办法设置回调方法(或任何其他界面)以便我仍然可以使用cv::VideoCapture对象?有没有更好的方法来完成处理视频而不将其写到文件然后重新读取它。如果这是更好的选择,我也愿意直接使用FFMPEG。如果需要,我想我可以将AVFrames转换为Mat。 最佳答案

c++ - 为什么我们必须在渲染过程中清除 OpenGL 中的深度缓冲区?

我试图运行一个OpenGL代码,它没有在glClear()中清除GL_DEPTH_BUFFER_BIT,因此我无法渲染我的场景。我添加了这一点,场景就渲染好了。为什么需要使用这个清除位?我可能知道这样做的原因,清除之前GPU使用的深度缓冲区值,但我只是想确认一下。 最佳答案 深度缓冲区保存场景中像素的“深度”。当OpenGL渲染您的几何图形时,每个片段(像素)都会与该点的深度缓冲区值进行比较。如果该片段的z值低于缓冲区中的值,它将成为新的最低值,因此成为要渲染的像素。如果不是,请不要渲染它-有更近的东西在阻挡它。这就是它的要点-您可

【Linux】语言层面缓冲区的刷新问题以及简易模拟实现

文章目录前言一、缓冲区刷新方法分类a.无缓冲--直接刷新b.行缓冲--不刷新,直到碰到\n才刷新c.全缓冲--缓冲区满了才刷新二、缓冲区的常见刷新问题1.问题2.刷新本质三、模拟实现1.Mystdio.h2.Mystdio.c3.main.c前言我们接下来要谈论的是我们语言层面的缓冲区(C,C++之类的),不是我们操作系统内核里面自带的缓冲区,我们每次在打开一个文件的时候,以C语言为例子,C语言会为我们所打开的这个文件分配一块缓冲区,用来缓存我们读写的数据`,这个缓冲区会被放在我们创建的FILE的结构体里面,里面存放着缓冲区的字段和维护信息一、缓冲区刷新方法分类a.无缓冲–直接刷新b.行缓冲–

c++ - 流缓冲区之间的 block 级数据复制

我想在std::streambuf之间高效复制数据实例。也就是说,我想在它们之间铲出数据block,而不是逐个字符地进行复制。例如,这不是我要找的:stringbufin{ios_base::in};stringbufout{ios_base::out};copy(istreambuf_iterator{in},istreambuf_iterator{},ostreambuf_iterator{out});这里有语法糖,还有更多的错误检查:ostreamos{&out};os这是operator*)的一个实现片段在我的标准库中(MacOSX,XCode7):typedefistream

c++ - 在不将前缓冲区复制回系统内存的情况下计算 gpu 前缓冲区中像素的平均值

我正准备为我的电脑构建一个流光溢彩的克隆。为此,我需要一种方法来计算屏幕多个区域的平均颜色。目前我发现最快的方法如下:pd3dDevice->CreateOffscreenPlainSurface(ddm.Width,ddm.Height,D3DFMT_A8R8G8B8,D3DPOOL_SCRATCH/*D3DPOOL_SYSTEMMEM*/,&pSurface,nullptr)pd3dDevice->GetFrontBufferData(0,pSurface);D3DLOCKED_RECTlockedRect;pSurface->LockRect(&lockedRect,nullpt

c++ - Direct2D 深度缓冲区

我需要绘制一个形状列表,我正在使用Direct2D。我从文件中获取形状列表。该列表已排序,文件中元素的顺序表示这些形状的绘制顺序。因此,例如,如果文件在相同位置指定了两个具有相同大小的矩形,则只有第二个矩形可见(因为第一个将被覆盖)。根据我的形状列表,我按以下方式进行绘制:listshapes;for(constauto&shape:shapes)shape.draw();很明显,如果我有两个形状,我不能颠倒绘制操作的顺序,这意味着我必须确保shape2总是在shape1之后绘制等等。随之而来的是我不能使用多线程来绘制我的形状,这在性能方面是一个巨大的劣势。我读到Direct3D支持深

c++ - 流缓冲区实现的 std::endl 和 '\n' 之间的差异

我目前正在尝试实现stringbuf的一个子类,以允许缓冲区对特定字符(在我的例子中为“\n”)进行标记,并在出现此字符时采取措施(将消息转储到记录器并清除缓冲区之后在我的情况下)。为了实现这个目标,我覆盖了sputc(以实现对'\n'的监视)和xsputn(确实使用sputc,因为GCC实现似乎默认情况下不这样做)。出于调试目的,我让sputc将传递给它的每个字符写出到标准输出。现在这是我的问题:如果我使用类似的东西mystreamsputc接收除了应该由std::endl引入的'\n'之外的每个字符,因此预期的操作没有完成,因为'\n'没有传递。如果我使用类似的东西mystream

c++ - 缓冲区填充不同类型的数据,并严格别名

根据thestandard,在C++中总是未定义的行为,例如,使float*指向与int*相同的内存位置,然后从它们读取/写入。在我的应用程序中,可以有一个缓冲区,其中填充了32位整数元素,这些元素被32位浮点元素覆盖。(它实际上包含图像的表示,由GPU内核在多个阶段进行转换,但也应该有一个执行相同处理的主机实现,以进行验证。)程序基本上是这样做的(不是实际的源代码):void*buffer=allocate_buffer();//properlyalignedbufferstatic_assert(sizeof(std::int32_t)==sizeof(float),"mustha

linuxC语言缓冲区及小程序的实现

文章目录1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区2.linux小程序的实现2.1回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果1.文件缓冲区1.1介绍为缓和CPU与I/O设备之间速度不匹配,文件缓冲区用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。1.2缓冲文件系统系统自动地在内存为程序中每一个正在使用的文件开辟一块文件缓冲区。从内存向磁盘输出数据,先送到内存中的缓冲区,缓冲区装满后一起输送到磁盘上。从磁盘向计算机读入数据,从磁盘文件中读取数据输入到内