小编Nmd*_*ery的帖子

C++,boost asio,接收以null结尾的字符串

如何使用boost :: asio库从套接字中检索以null结尾的字符串?

c++ sockets string boost boost-asio

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

一些澄清需要abous Boost asio异步操作和定时器

如果我理解正确的话,我想知道异步连接中的定时器的一个方面.

假设我们在执行读操作之前设置了一个计时器,其中包括一个处理程序,然后run()是io_service.

据我了解,io_service在调用后经理结束后立即结束,这可能有两个原因:

a)读操作完成.

b)计时器已达到极限.

假设已达到第一个(a)条件,并且在计时器结束之前已完成读取操作.

问题是:该计时器会发生什么?我们需要完成它吗?说

dTimer_.expires_from_now (boost::posix_time::seconds(0));

after the io_service.run()?
Run Code Online (Sandbox Code Playgroud)

如果有必要可以将相同的计时器对象重新用于另一个读操作,是否可以将其重置为新的时间间隔?

我可以重置()io_service并在run()新操作中重用相同的对象吗?

c++ boost boost-asio

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

在C ++中实现高效的多线程文件I / O

我目前正在开发自定义的跨平台文件服务器(C ++,boost)。显然,它将对硬盘进行大量读取和写入。为了使事情更复杂,它还将成为多线程并使用异步套接字I / O(带有asio)。

现在,我想知道,是否可以使用任何众所周知的实践,模式或方法?也许一些现有的图书馆或什么?当然,我可以尝试从头开始开发它,但确实感觉像是在重新发明轮子。任何通用建议也将不胜感激。

c++ io boost boost-asio

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

编译V8没有网络等

我想将V8嵌入到我正在开发的项目中.该项目根本不使用网络 - 实际上它出于安全原因避免了网络连接(我不想打开我不准备的跨站点脚本的潘多拉盒子).无论如何,我只想要javascript.

据我所知,V8只是一个简单的javascript编译器和VM,这很好 - 但它需要与各种第三方库一起编译才能适应增加的功能.我想,网络就是其中之一.为了能够构建使用V8的应用程序,您必须与Winsock链接.

我希望能够从引擎中删除这些额外的库,并从头开始添加绑定到我自己的内部代码(除了字符串和类似的东西),但我找不到帮助我做的指南或文档这个.V8在我应该知道的javascript引擎之上添加了什么功能,我该如何删除它?

编辑:我也注意到包含了URI,这对我正在做的事情并不是特别有用.URI函数没有优化,因为可执行文件中嵌入了标准的排序库,我也想删除它们(以及任何其他XML/Http相关的javascript函数).

javascript c++ v8

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

OpenGL独家模式全屏

DirectX允许应用程序独占一个GPU并将其内容发送到监视器.这被称为全屏.使用OpenGL时,使用激活全屏ChangeDisplaySettings(&dv, CDS_FULLSCREEN).然而,这样做的结果是"假的"全屏 - 全屏窗口.这两者的行为方式存在一些差异,特别是当alt-tabbing失焦时.

有没有办法像DirectX一样只使用Win32 api和OpenGL来全屏创建一个窗口,或者这是DirectX独有的功能?

c++ windows opengl winapi

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

正确处理Alt-Enter/Alt-Tab全屏分辨率

DXGI的MSDN页面提供了有关如何处理与桌面分辨率不同的全屏分辨率的说明.它说要在打电话IDXGISwapChain::ResizeTargets()之前打电话IDXGISwapChain::SetFullscreenState()以防止闪烁等等.

它没有说明如何处理Alt-Enter,IDXGISwapChain::SetFullscreenState()在程序有机会自己调用之前调用它IDXGISwapChain::ResizeTargets().如果在WM_SIZE消息上调用后一种方法,WM_SIZE则将发送另一条消息,可能导致无限循环.当按下alt-enter或alt-tab时,如何确保后者在前者之前被调用,并且模式切换一般无痛地进行?

c++ windows directx direct3d dxgi

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

处理多个图形适配器和显示器

我正在尝试决定是否在我的应用程序中支持多个适配器/显示器,而不是将我的窗口锁定到主适配器和主显示器。我对此有很多疑问,因为我从未使用过具有多个显卡的系统。

当存在多个显卡时,Windows 桌面如何表现?如果两张卡都运行自己的一组监视器,是否可以在一张卡的监视器和另一张卡的监视器之间拖动窗口?如果是这样,在这种情况下我的 Direct3D 11 上下文将使用什么卡?

DXGI 的抽象如何与 Crossfire/SLI 中的卡以及非 Crossfire/SLI 中的卡一起工作?

当存在多个显示器时,Windows 如何处理垂直同步?

是什么决定哪个图形适配器被视为主适配器?

我确信还有更多相关信息我不知道要询问,因此任何有关此的额外信息也会有所帮助。

dxgi direct3d11

5
推荐指数
0
解决办法
1419
查看次数

CreateComputeShader 使用 double 时返回 E_INVALIDARG

对于使用 DirectCompute 的某些 GPGPU 计算,我需要双精度。当我将所有内容都设置为浮点数时,着色器将编译并运行得很好。但是,当我尝试在我的着色器中的任何地方使用 doubles 时,它会编译,但ID3D11Device::CreateComputeShader()在运行时调用失败并显示E_INVALIDARG. C++ 端代码完全相同,请注意,我刚刚将着色器中的一些变量更改为两倍。

当我调用ID3D11Device::CheckFeatureSupport()D3D11_FEATURE_DOUBLES,它报告说我的适配器支持双倍,这是 AMD Radeon R9 270x。根据一些谷歌搜索,AMD 卡实际上非常擅长双精度计算 - IE,我的卡可以使用双精度,但 DirectX 似乎不想让我这样做。

我想也许 DirectCompute 没有这种能力(这很奇怪,因为很多科学的 GPGPU 进程需要双打),所以我尝试使用像素着色器。同样的事情发生。

这是驱动程序错误,还是我遗漏了什么?

编辑:我刚刚搜索了最新的 Catalyst 驱动程序,显然我支持几个版本。这很有趣,考虑到我最近去过控制中心并检查了几次更新。我要更新,看看会发生什么。

EDIT2:更新没有效果。要么我做错了什么,要么 DirectX 有各种各样的错误。

c++ direct3d gpgpu hlsl direct3d11

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

boost :: asio :: io_service :: poll()带来的麻烦

以下代码:

/***************************************************************************/

boost::mutex m;

struct func {
   func(int v):n(v) {}
   void operator()() {
      {  boost::mutex::scoped_lock l(m);
         std::cout << "run function " << n << std::endl;
      }
      for ( int idx = 0; idx < 4; ++idx ) {
         {  boost::mutex::scoped_lock l(m);
            std::cout << "function " << n << ", ping " << idx << std::endl;
         }
         sleep(1);
      }
   }

private:
   int n;
};

/***************************************************************************/

int main(int argv, const char** argc) {
   boost::asio::io_service io;

   for ( int idx = 0; idx …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

4
推荐指数
1
解决办法
4348
查看次数

使用类定义中的推断维度初始化静态const多维数组

从C++ 11开始,可以在类定义中初始化静态const内置类型,如下所示:

class A {
public:
    static const unsigned int val = 0; //allowed
};
Run Code Online (Sandbox Code Playgroud)

但是,在带有数组的Visual C++ 2013中执行此操作会给我一个错误,告诉我这是不允许的:

class B { 
public:
    static const unsigned int val[][2] = { { 0, 1 } }; //not allowed
};
Run Code Online (Sandbox Code Playgroud)

错误消息只是读取"类型为const unsigned int [] [2]的成员不能有类内初始化程序." 相反,我被迫做以下事情:

class C {
public:
    static const unsigned int val[][2];
};

const unsigned int C::val[][2] = { { 0, 1 } };
Run Code Online (Sandbox Code Playgroud)

这是不幸的,因为我的代码依赖于val的大小,我希望能够更改val的内容,而不必记住返回并在某处更改常量.是否有这样做的不同的方式,让我使用sizeofval任何点声明下面的文件吗?

c++ visual-c++ c++11 visual-studio-2013

4
推荐指数
1
解决办法
4470
查看次数