草庐IT

c++ - 当缓冲区缩小时,是否保证 realloc 就位?

是否可以保证realloc()总是就地缩小缓冲区?因此:new_ptr=(data_type*)realloc(old_ptr,new_size*sizeof(data_type));如果new_size我正在研究非POD数据类型数组的重新分配,如果上述行为得到保证,我认为以下策略至少可以允许有效的“收缩”:if(new_size>old_size){//malloc()anewbuffer//useplacementcopyconstructortocopyoldobjectsover//free()oldbuffer}elseif(new_size我希望即使数据类型具有自引用/指针

c++ - 从内存缓冲区创建 HBITMAP

我有一个应用程序可以从数据库中加载一些blob数据,这些数据可以表示各种位图和图标的png格式或原始二进制数据。这被存储在std::vector我正在使用CImageList对象在TreeView、工具栏图像等中显示各种图像,但问题是从内存中的数据创建位图变得模糊,就像在执行以下操作时缺少像素一样:std::vectorbits;HBITMAPhbitmap=CreateBitmap(16,16,1,32,bits.data());为了暂时解决这个问题,我只是将vector中的data()写到一个临时文件中,然后使用LoadImage将其读回并从中创建HBITMAP。这非常有效,但不可

c++ - 为现有缓冲区提供 std::istream 接口(interface)而不复制它

我有一个固定长度的字符缓冲区,我想将它提供给一个接受std::istream&的函数。如何在不复制缓冲区的情况下做到这一点?如果这意味着派生自定义streambuf,我想我会接受拷贝。我只是想知道我是否遗漏了一些直截了当的东西。这是我现在正在做的事情(执行不需要的拷贝):voidloadFromBuffer(constchar*buff,size_tlen){std::istringstreamis(std::string(buff,len));//BUFFERCOPIEDHERE:(load(is);}编辑:作为记录,这是使用boost.Iostreams的直接解决方案:#inclu

c - 刷新通信句柄接收缓冲区?

在Win32C中是否有API调用来刷新(转储)COM端口接收缓冲区的内容?我只能找到刷新传输缓冲区的函数。 最佳答案 `PurgeComm()'可以丢弃Tx和Rx缓冲区中的一个或两个缓冲区中的所有字符,并中止端口上任何挂起的读取和/或写入操作。要对端口执行所有操作,请这样说:PurgeComm(hPort,PURGE_RXABORT|PURGE_TXABORT|PURGE_RXCLEAR|PURGE_TXCLEAR)您可能还想确保您已经处理或显式忽略了端口上的任何未决错误,可能是ClearCommError().ReadFile()

windows - Windows 7 串口输出缓冲区大小

Unix串口有一个很大的输出缓冲区。只要缓冲区中有空间,写入调用就会立即返回。当没有足够的空间时,阻塞写入会一直等待,直到缓冲区被清空到某个较低的水平。在Windows7SP1中,内置16550串行端口的行为就好像没有输出缓冲区一样。似乎写入block,直到数据从端口输出。如果有缓冲区,它甚至比设备管理器中设置的16字节(在COM1的高级设置中)还要小。SetupComm函数让我指定输入和输出缓冲区的推荐大小。但是,输出缓冲区大小似乎没有改变任何行为,并且GetCommProperties始终将dwCurrentTxQueue字段设置为零。SetupComm唯一可以做的就是增加输入缓冲

非常大的 10G 缓冲区的 c++ FIFO 实现

我需要实现一个10G环形缓冲区(FIFO)。我需要用C++编写这个程序以进行集成(必须与C++API集成),尽管我认为在Java中使用它的FileChannel类会更容易。我知道我需要使用内存映射文件,只是不确定如何在C++中执行此操作。我想我必须使用缓冲区并将其重新映射到基础文件的不同部分?像那样的东西。无论如何,如果有人有一些示例代码(非MFC),那就太好了。我将在运行Windows732位的32位硬件上实现它。谢谢。 最佳答案 创建在Windows和UNIX上都有效的内存映射文件的一种方法是使用BoostC++库,参见here

windows - 用于保留缓冲区的 Powershell Clear-Host 替代方案

我想要类似Clear-Host的东西,但想要回滚。到目前为止,我所要做的基本上就是添加换行符,直到屏幕清晰为止。虽然当我这样做时,光标开始在页面底部书写(正如预期的那样——尽管不是期望的)。我希望在页面顶部开始书写(对于菜单等——这是很自然的做法)这是打印新行动态计数的代码:do{Write-Host"";$i++}while($i-ne$Host.UI.RawUI.WindowSize.Height)我确实看到了一些关于Transcript模块的信息,但我不希望那样。提前致谢。 最佳答案 这是一个单行代码,可以准确地提供您正在寻找

windows - 当提供的缓冲区太小时返回哪个 HRESULT?

我在IUnknown派生的COM接口(interface)中有一个函数:HRESULTGetPassword([in]longbufferLength,[out]WCHAR*buffer);并且契约是实现应该检查缓冲区是否足够大以存储正在检索的字符串。如果缓冲区足够大,则复制字符串并返回S_OK,否则函数将返回错误指示。但是我找不到合适的HRESULT值。E_UNEXPECTED看起来很愚蠢而且没有帮助。我找到的最接近的是DISP_E_BUFFERTOOSMALL,但看起来它仅适用于IDispatch派生的接口(interface)。如果提供的缓冲区太小,我应该返回哪个HRESULT?

windows - 在 Windows 下更改默认套接字缓冲区大小

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭3年前。Improvethisquestion我无法更改的应用程序正在丢弃一些传入的UDP数据包。我怀疑接收缓冲区溢出了。是否有注册表设置使默认缓冲区大于8KB?

opengl - 在两个应用程序之间共享 OpenGL 帧缓冲区/渲染缓冲区

假设我有一个应用程序A,它负责通过OpenGL库在屏幕上绘制内容。出于紧密集成的目的,我想让这个应用程序A完成它的工作,但在FBO中渲染或直接在渲染缓冲区中渲染,并允许应用程序B具有只读访问此缓冲区以处理屏幕上的显示(基本上将其渲染为2D纹理)。似乎FBO属于OpenGL上下文,并且上下文不可在进程之间共享。我绝对理解允许多个进程在同一上下文中混淆是邪恶的。但就我的具体情况而言,我认为认为它可能非常安全是合理的。编辑:渲染大小接近全屏,我在考虑2048x204832bits缓冲区(我现在不使用alphachannel,但为什么以后不使用)。 最佳答案