小编Gam*_*ads的帖子

如何在等待时取消 `boost::asio::read` 操作

我正在使用boost::asio从客户端到服务器来回传输数据。我在客户端有一个读取器线程来读取在客户端的套接字上接收到的数据。请注意,我boost::asio::read在客户端和boost::asio::write服务器端使用。不使用async_readasync_write。一切都很好。

但是,当我关闭我的应用程序时,该应用程序有 2 次 10 次没有完全拆除或正确关闭。它在关闭时挂起问题如下:

当我的应用程序关闭期间调用析构函数时,我的关闭函数被调用。以下是关闭函数的代码:

socket.cancel();
socket.close();
boost::system::error_code ec;
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
Run Code Online (Sandbox Code Playgroud)

问题是boost::asio::read当它没有获得任何数据时调用不会返回并继续等待它。只要我可以取消它,这应该没问题。我正在尝试socket.cancel在退出时取消所有读取操作。但是,它似乎不起作用。我在一些论坛上读到socket.cancel只取消async_read操作。是这样吗 ?那么当我的应用程序需要退出时取消 boost::asio::read` 操作的方法是什么?

c++ sockets boost-asio

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

std :: round不是android上std的成员

我在std::round为Android和iOS构建的Qt应用程序上使用C++ 11.但在Android上,我得到的错误, std::round is not a member of std尽管包括cmath标题.

我怎样才能std::round在android上工作?有替代品std::round吗?

以下是我的android环境:

ANDROID_NDK_PLATFORM = android-23
NDK version          = r13b
ANDROID_NDK_TOOLCHAIN_VERSION = 4.9
Run Code Online (Sandbox Code Playgroud)

c++ qt android-ndk c++11

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

在 Android 和 iOS 设备上保存纹理的 GPU 内存限制

我正在创建一个 Android 应用程序,Open GL ES 3.0该应用程序必须满足各种设备的需求。

由于我的应用程序中的某些要求,我必须在我的应用程序运行时在 RAM 上保留大量图像数据。由于 Android 手机对每个应用程序的 CPU 内存使用有heap memory size限制或限制,因此我决定在我的应用程序运行时将所需的图像数据保留为 GPU 内存上的纹理。

我的纹理大小是1024x1024. 保存纹理并在需要时再次显示它们对于它的实现部分来说一切正常。

但是,很快我发现 GPU 内存也有严格的限制看起来)。我只能1024x1024x50Sony XPeria Z5上保存大约数量的纹理。1024x1024x70另一个Sony XPeria系列上的纹理。1024x1024x90华为 P8等上。

另外,我发现有一个限制textures/GPU memoryiOS装置了。我无法1024x1024x90iPhone 6+!!

这里的数字不准确,但非常接近。我提出这个问题的目的是了解Android 设备上的应用程序允许使用多少 GPU 内存

GPU 内存是否允许与 CPU 内存相关的 android 应用程序以某种方式如此链接所示?

Android 应用程序可以large …

android gpu opengl-es ios

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

Android FFmpeg:对 atof、log2 和 log2f 的未定义引用

我正在尝试使用android-ndk-r15c链接到为 android 构建的 FFmpeg。我通过下载最新的ffmpeg-3.3.4 FFmpeg 源代码来构建它。

以下是我的链接器列表:

-lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -lpostproc
Run Code Online (Sandbox Code Playgroud)

我收到以下错误抱怨

libavformat/hls.c:783: error: undefined reference to 'atof'
libavcodec/ffv1enc.c:146: error: undefined reference to 'log2'
libavcodec/imc.c:428: error: undefined reference to 'log2f'
Run Code Online (Sandbox Code Playgroud)

以下是我的 FFmpeg 相关包括:

#include <stdint.h>
#include <cstdlib>

#define __STDC_CONSTANT_MACROS

extern "C" {

#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/mathematics.h"
#include "libavcodec/version.h"
#include "libavutil/rational.h"
#include "libavutil/avstring.h"
#include "libswscale/swscale.h"

}
Run Code Online (Sandbox Code Playgroud)

以下是我为 android 交叉编译 FFmpeg 的构建脚本

#!/bin/bash

cd ffmpeg-3.3.4

NDK=/path/to/ndk/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm/ …
Run Code Online (Sandbox Code Playgroud)

c++ android ffmpeg atof android-ndk

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

std::chrono::milliseconds .count() 以微秒为单位返回?

我正在尝试记录一段时间内流逝的毫秒时间。

我有一堂这样的课

// class member declarations
class MyClass {

    std::chrono::high_resolution_clock::time_point   m_start;
    std::chrono::system_clock::duration              m_elapsed;
};
Run Code Online (Sandbox Code Playgroud)

我在课堂上有两种方法。一个是从 main 调用的func1CalledFromMainThread

// Class methods
using namespace std::chrono;
void MyClass::func1CalledFromMainThread() {

    m_start = std::chrono::high_resolution_clock::now();
}
Run Code Online (Sandbox Code Playgroud)

另一个是func2CalledFromADifferentThread从不同的线程调用的

void MyClass::func2CalledFromADifferentThread() {

    // after some time following line of code runs from a different thread
    auto end = high_resolution_clock::now();

    m_elapsed = duration_cast<milliseconds>(end - m_start);
    std::cout << "Elapsed time in milliseconds is " << m_elapsed.count()/1000 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

问题出在cout日志记录中。我发现我必须除以1000才能得到毫秒m_elapsed。不 …

milliseconds c++11 c++-chrono

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

如何在使用 ListView.builder 时动态更新特定列表视图项?

我正在 Flutter 中制作列表视图。我想在长按项目时更新项目的属性。

以下是完整代码:

// main.dart
import 'package:LearnFlutter/MyList.dart';
import 'package:flutter/material.dart';
import 'MyList.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'List Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'My list demo'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold( …
Run Code Online (Sandbox Code Playgroud)

listview dart flutter

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

是否可以将std :: condition_variable与std :: lock_guard一起使用?

我正在使用这样的std::condition_variable结合std::unique_lock

std::mutex a_mutex;
std::condition_variable a_condition_variable;
std::unique_lock<std::mutex> a_lock(a_mutex);
a_condition_variable.wait(a_lock, [this] {return something;});
//Do something
a_lock.unlock();
Run Code Online (Sandbox Code Playgroud)

工作正常。据我了解,std::condition_variable接受std::unique_lock它等待。但是,我正在尝试将其与std::lock_guard但不能结合在一起。

我的问题是: 可以std::unique_lock用a std::lock_guard代替吗?这样可以避免我每次使用锁时都手动解锁。

c++ mutex condition-variable c++11

5
推荐指数
3
解决办法
1825
查看次数

使用带有PROVISIONING_PROFILE的xcodebuild命令行签名应用程序失败

我尝试使用Xcode签署我的app命令行.

像这样运行xcodebuild命令行:MyApp.xcodeproj

xcodebuild -project "MyApp.xcodeproj" -target "MyApp" -sdk "iphoneos" -configuration *Release* PROVISIONING_PROFILE="xxxx-xxxx-xxxx-xxxx" CODE_SIGN_IDENTITY="iPhone Developer: something.com (SOMEVALUE)"
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

Check dependencies
Provisioning profile "iOS Team Provisioning Profile: *" doesn't include signing certificate "iPhone Developer: something.com (SOMEVALUE)".
Provisioning profile "iOS Team Provisioning Profile: *" is Xcode managed, but signing settings require a manually managed profile.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

** BUILD FAILED **
Run Code Online (Sandbox Code Playgroud)

怎么了 ?我的xcodebuild命令缺少什么?

如何包含其询问的签名证书?

我从下面的回答和评论中尝试了什么
据我所知,一个专用distribution …

xcode xcodebuild provisioning-profile ios-provisioning

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

如何使用QSGGeometryNode而不会导致内存泄漏并确保正确清理

我使用a QSGGeometry,QSGVertexColorMaterial&a QSGGeometryNode在我的QQuickItem派生类上实时绘制MyQuickItem.

以下是我的updatePaintNode方法,其中重绘逻辑的关键在于.

QSGNode * MyQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) {

  if (!oldNode) {
    oldNode = new QSGNode;
  }

  oldNode->removeAllChildNodes();

  QSGGeometry * geometry = GetMyGeometry();
  QSGVertexColorMaterial * material = new QSGVertexColorMaterial;
  QSGGeometryNode * child_node = new QSGGeometryNode;

  child_node->setGeometry(geometry);
  child_node->setMaterial(material);
  child_node->setFlag(QSGNode::OwnsMaterial);
  oldNode->appendChildNode(child_node);

  return oldNode;
}
Run Code Online (Sandbox Code Playgroud)

问题:
以上逻辑很有效.完全没有功能问题.也没有性能问题.但我担心我会导致内存泄漏.在上面的方法updatePaintNode中查看以下两行,我分配原始指针.

QSGVertexColorMaterial * material = new QSGVertexColorMaterial;
QSGGeometryNode * child_node = new QSGGeometryNode;
Run Code Online (Sandbox Code Playgroud)

我分配它们并且我不删除它们.这是因为应该删除它们的位置updatePaintNode.那不是我的控制. …

c++ qt scenegraph qml qsgclipnode

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

如何使用 Qt Multimedia 获取 video.mp4 中的总帧数

场景
我正在使用QMediaPlayer在VideoOutput上显示视频。
效果很好

我做了一个MyQMediaPlayerPtr->setMedia(sample_video.mp4)并且我可以完全控制该视频播放。

我正在使用QMediaPlayer'ssetPostion从视频中寻找随机帧。sample_video.mp4但是,如果我可以查询该使用QMediaPlayer或其他Qt Multimedia组件中的帧总数,它将非常有效。

问题
如何获取帧数sample_video.mp4?可以使用QMediaPlayerAPI​​吗?
如果没有,哪个实用程序可以Qt Multimedia为我提供此信息?

c++ qt qmediaplayer qtmultimedia

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