小编Shm*_*Cat的帖子

C++中的延迟/承诺模式

我最近发现并且爱上了jQuery中使用的Deferred/Promise模式.它只是封装了许多异步用例,包括精彩的链接,过滤能力,我不敢相信我错过了这么久.

我刚刚完成重构我的AS3代码以使用优秀的CodeCatalyst/promise-as3库(https://github.com/CodeCatalyst/promise-as3),所以开始考虑回到我的C++代码并看看我是如何可以在那里实施模式.

在我自己开始编码之前,我检查过它是否已经完成,并发现std::future/ std::promise(和提升等价物),但它们非常重(它们似乎使用真正的线程等,并且具有沉重的模板语法).

所以,我的问题是:是否存在deferred/Promise模式的轻量级纯C++实现,jQuery风格?

裁判:

c++ design-patterns promise jquery-deferred

14
推荐指数
3
解决办法
6516
查看次数

GDB以无序方式跳转到错误的行

应用程序设置:我的C++ 11应用程序使用以下第三方库:

  • 提升1.51.0
  • cppnetlib 0.9.4
  • jsoncpp 0.5.0

应用程序代码依赖于几个内部共享对象,所有这些对象都由我的团队开发(执行这些共享对象的经典链接时间,不使用dlopen等)

我正在使用GCC 4.6.2,使用GDB 7.4 7.6 时会出现问题.

操作系统 - Red Hat Linux 7.0版(Guinness)x86-64

问题 在共享对象代码中发出断点并发出gdb next命令时,有时GDB会向后跳转到某些行,没有任何合理的原因(特别是在抛出异常之后,对于那些异常,有合适的catch块)

网上的类似问题在"关闭任何GCC优化"的方面得到了回答,但我的GCC CL显然没有使用任何优化并要求获得调试信息,请注意-O0&-g开关:

COLLECT_GCC_OPTIONS= '-D' '_DEBUG' '-O0' '-g' '-Wall' '-fmessage-length=0' '-v' '-fPIC' '-D' 'BOOST_ALL_DYN_LINK' '-D' 'BOOST_PARAMETER_MAX_ARITY=15' '-D' '_GLIBCXX_USE_NANOSLEEP' '-Wno-deprecated' '-std=c++0x' '-fvisibility=hidden' '-c' '-MMD' '-MP' '-MF' 'Debug_x64/AgentRegisterer.d' '-MT' 'Debug_x64/AgentRegisterer.d' '-MT' 'Debug_x64/AgentRegisterer.o' '-o' 'Debug_x64/AgentRegisterer.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
Run Code Online (Sandbox Code Playgroud)

另请注意,根据Linux DSO 最知名的方法,我们隐藏了符号的可见性,只有我们想要公开的类才被暴露(也许这是相关的???)

root导致此问题的后续步骤应该是什么?

c++ gdb redhat g++ c++11

10
推荐指数
1
解决办法
2191
查看次数

Nexus 6和Nexus 9屏幕密度

谁能告诉我哪个Drawable Nexus 6和Nexus 9支持xxhdpi或xxxhdpi?我还想知道Nexus 6是否支持big-hdpi或其他任何东西?

我在谷歌搜索但没有找到运气?

谢谢.

android android-layout android-screen-support

8
推荐指数
1
解决办法
1万
查看次数

使用自定义函数.NET Core 2覆盖OnTokenValidated JwtBearerEvents

在我的API项目中,我使用JwtBearer处理身份验证(用户使用Azure登录).调用API时,使用定义的Azure实例验证令牌,这一切都正常.

成功验证令牌后,已使用适当的角色将已登录的用户插入到我们自己的数据库中.现在处理的方式如下:

// Add authentication (Azure AD)
            services
                .AddAuthentication(sharedOptions =>
                {
                    sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
                    sharedOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
                    sharedOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
                })
                .AddJwtBearer(options =>
                {
                    options.Audience = this.Configuration["AzureAd:ClientId"];
                    options.Authority = $"{this.Configuration["AzureAd:Instance"]}{this.Configuration["AzureAd:TenantId"]}";

                    options.Events = new JwtBearerEvents()
                    {
                        OnTokenValidated = context =>
                        {
                            // Check if the user has an OID claim
                            if (!context.Principal.HasClaim(c => c.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier"))
                            {
                                context.Fail($"The claim 'oid' is not present in the token.");
                            }

                            ClaimsPrincipal userPrincipal = context.Principal;

                            // Check is user exists, if not then insert the …
Run Code Online (Sandbox Code Playgroud)

jwt bearer-token asp.net-core

7
推荐指数
1
解决办法
6636
查看次数

Setting frame position in video capture between each capture causes h264 errors "co located POCs unavailable" and "mmco: unref short failure"

I am reading a video file with OpenCV for image recognition where I'm just interested in 1 of 60 frames every second, so instead of capturing 60 frames before getting to the next one I thought I could speed up the code by setting frame position between each iteration

while (capture.isOpened()):

    capture.set(cv2.CAP_PROP_POS_FRAMES, frame_count)

    ret, frame = capture.read()
    frame_count += round(fps)

    if ret:
...
Run Code Online (Sandbox Code Playgroud)

However, when I do it this way the following errors keep spamming in the terminal:

[h264 @ …
Run Code Online (Sandbox Code Playgroud)

python opencv h.264 python-3.x

7
推荐指数
0
解决办法
1162
查看次数

使用主可执行文件中定义的函数的 .dll 插件

我有一个加载 . dll/.so插件,它在 Linux 中工作得很好,但在 Windows(Visual Studio 2012)上,它因未定义的引用错误而失败。

该插件使用session->SendLine("bla")在 Main 可执行文件中定义的函数。(在插件中包含的 .h 中定义的会话 ans 方法类,但在 main exec 中编译的 .cpp 中的实际功能)。

tl; dr:“我需要 Windows 链接器忽略插件中未定义的引用,在主可执行文件中定义”

在 Windows 中“使其工作”但在没有百万#ifdef的情况下保持与 Linux 兼容的最佳方法是什么?

c++ dll plugins undefined-reference visual-studio-2012

6
推荐指数
1
解决办法
2055
查看次数

在android上通过udp://显示来自mpegts流的h264视频

在 Android 上通过 udp:// 显示来自 mpegts 流的 h264 视频。

几天来我一直在尝试让它发挥作用,但没有成功。我拥有的是一个生成 h264 视频流的设备,它通过原始 udp(不是 rtp)在 mpegts 容器中进行多播。我正在尝试让它显示在 Android 上的自定义应用程序中。

我读到 android 内置的 MediaPlayer 支持 h264 (avc) 和 mpegts,但它不处理 udp:// 流,所以我不能使用它(这将是迄今为止最简单的)。相反,我尝试手动将 mpegts 流解析为基本流,并将其传递给已传递到 SurfaceView 表面的 MediaCodec。无论我似乎尝试什么,总会发生两件事(一旦我修复异常等):

  • SurfaceView 始终是黑色的。
  • MediaCodec 总是接受大约 6-9 个缓冲区,然后dequeueInputBuffer立即开始失败(返回 -1),并且我无法对其他任何内容进行排队。

我可以将 mpeg 流拆分为 TS 数据包,然后将其有效负载加入 PES 数据包。我尝试将完整的 PES 数据包(减去 PES 标头)传递到 MediaCodec 中。

我还尝试通过将 PES 数据包拆分并将\x00\x00\x01其单独传递到 MediaCodec 中,将其拆分为单独的 NAL 单元。

我还尝试推迟传递 NAL 单元,直到收到 SPS NAL 单元并首先使用BUFFER_FLAG_CODEC_CONFIG.

所有这些都会导致上面提到的同样的结果。我不知道该尝试什么,所以任何帮助将不胜感激。

有几点我还不确定:

  • 我见过的几乎所有示例都从 MediaExtractor 获取 MediaFormat,但我无法在流上使用它。少数不使用 MediaExtractor …

android h.264 android-mediacodec

6
推荐指数
1
解决办法
4857
查看次数

int*vs float*type

给出以下代码片段:

int *iptr;
float *fptr;
float fval;
fval = 0.0;
fptr = &fval;
iptr = fptr;
printf("%d \n", *iptr);
fval = 1.0;
printf("%d \n", *iptr);
Run Code Online (Sandbox Code Playgroud)

输出是:

0
1065353216

为什么第一个print语句至少大致匹配与*iptr(0.0)相关的值,但第二个print语句没有?

c floating-point pointers assign

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

如何在JSP中声明int变量?

在JAVA中,我声明了一个int变量,需要打印它.我的代码:

public int i=0;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

输出:1但我的所需输出是01我该怎么办?

提前致谢

java variables jsp

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

c ++ #define和concatenate case(我正在使用gcc)

我有

#define NAME(value) my ## value ## value
Run Code Online (Sandbox Code Playgroud)

当我这样做的NAME(1)时候my1value,这是好的!

但是我想把变量传递给NAME(),比如

for(int i=0;i<10;i++)
{
    NAME(i);
    ...
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它变成了myivalue,但我想my0value,my1value等等.

我应该改变什么?谢谢

c c++ gcc

2
推荐指数
1
解决办法
132
查看次数

std :: minmax initializer_list <T>参数

也许这个问题有点理论,但我不知道什么是落后定义设计激励std::minmax这样的

template <class T>
pair<T,T> minmax (initializer_list<T> il);
Run Code Online (Sandbox Code Playgroud)

这意味着,IMO(传递的对象)li将被复制,其每个成员也必须是可复制构造的.

虽然,std::min_element(或者就此而言std::max_element)在某种意义上更加"有效",但只传递容器迭代器(不需要实际复制整个容器)

template <class ForwardIterator>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last);
Run Code Online (Sandbox Code Playgroud)

编辑 - 基于Joachim Pileborg评论,initializer_list<T>对象没有被复制,所以我正在查明我的问题 - 为什么std::minmax被约束到这样的对象而不是任意容器(具有"非const"性质,可以这么说)

c++ std c++-standard-library minmax c++11

0
推荐指数
1
解决办法
162
查看次数