小编Gam*_*ads的帖子

如何使用cat命令获取文件的最后一行

我在OSX(unix)环境中编写shell脚本.我有一个名为test.properties以下内容的文件:

cat test.properties 得到以下输出:

//This file is intended for 
//blah blah purposes
123
Run Code Online (Sandbox Code Playgroud)

使用cat命令,我怎样才能获得文件的最后一行?

unix macos shell cat

22
推荐指数
2
解决办法
3万
查看次数

如何告诉 git 显示我在上次提交中所做的更改的差异?

使用git,我如何查看上次提交中的更改?

我的意思是我想看到我的最后一次提交和之前的提交之间的差异。我知道我可以在 Github 浏览器上看到它,但我想在终端上的本地提交历史记录中看到它。

我知道我可以在提交之间进行 git diff 。所以,我可以git diff oldCommit...HEAD看到这些变化。但是有没有一个命令可以让我不必oldCommitgit log繁琐的地方复制呢?

git git-diff

18
推荐指数
2
解决办法
9558
查看次数

如何在睡眠时唤醒std :: thread

我正在使用C++ 11,我有一个std::thread类成员,它每2分钟向听众发送一次信息.其他它只是睡觉.所以,我让它睡了2分钟,然后发送所需的信息,然后再睡2分钟.

// MyClass.hpp
class MyClass {

    ~MyClass();
    RunMyThread();

private:
    std::thread my_thread;
    std::atomic<bool> m_running;
}


MyClass::RunMyThread() {

    my_thread = std::thread { [this, m_running] {
    m_running = true;
    while(m_running) {
        std::this_thread::sleep_for(std::chrono::minutes(2));
        SendStatusInfo(some_info);
    }
}};
}

// Destructor
~MyClass::MyClass() {
    m_running = false; // this wont work as the thread is sleeping. How to exit thread here?
}
Run Code Online (Sandbox Code Playgroud)

问题:
这种方法的问题是我无法在线程休眠时退出线程.我从阅读中理解,我可以使用a唤醒它std::condition_variable并优雅地退出?但我正在努力寻找一个简单的例子,它可以满足上述场景中的要求.condition_variable我发现的所有例子看起来都太复杂了,我想在这里做些什么.

问题:
如何std::condition_variable在睡眠时使用a 唤醒线程并正常退出?或者,没有这种condition_variable技术,还有其他方法可以实现相同的目标吗?

另外,我看到我需要std::mutex结合使用std::condition_variable?这真的有必要吗?通过将std::condition_variable逻辑仅添加到代码中的所需位置,是否无法实现目标? …

c++ mutex condition-variable c++11 stdthread

14
推荐指数
4
解决办法
3663
查看次数

SocketException:连接失败(操作系统错误:不允许操作,errno = 1)与 macOS 上的 flutter 应用程序

我的 Flutter 应用程序中有以下代码,其中MyDataLoader一个小部件从main.dart

代码:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyDataLoader extends StatefulWidget {
  @override
  _MyDataLoaderState createState() => _MyDataLoaderState();
}

class _MyDataLoaderState extends State<MyDataLoader> {
  void getData() async {
    final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
    print(response);
  }

  @override
  void initState() {
    super.initState();
    getData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Text('MyDataLoader screen'),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

问题:
以上代码的灵感来自https://flutter.dev/docs/cookbook/networking/fetch-dataMyDataLoader加载小部件时出现以下错误:

[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:SocketException:连接失败(操作系统错误:不允许操作,errno = 1),地址 = jsonplaceholder.typicode.com,端口 = 443

上述错误当然是因为我的小部件加载时调用了以下代码行。

最终响应 = await http.get('https://jsonplaceholder.typicode.com/albums/1');

但是 …

macos http flutter flutter-http

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

如何以 Android 为目标设备进行“flutter run”?

我使用以下命令在 macOS 上构建并运行了 flutter 应用程序。

flutter run
Run Code Online (Sandbox Code Playgroud)

这很棒。
现在,我想在 Android 设备上运行我的应用程序。它启用了开发人员模式,并在我运行时被识别adb devices。我还在我的 Android 设备上运行了其他应用程序。所以,我确信 Android 设备已经为 Android 开发做好了准备。

但现在执行时flutter run,我的应用程序仍然在 macOS 而不是 Android 设备上运行。我做了一个flutter build apk为Android构建我的应用程序的项目。但是,flutter run仍然可以在 Mac 上运行,而不是在 Android 上运行。

没有flutter run专门在Android上运行构建的命令吗?

flutter flutter-apk flutter-android

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

正确的方法来暂停和恢复std :: thread

std::thread在我的C++代码中使用一个不断轮询一些数据并将其添加到缓冲区.我使用a C++ lambda来启动这样的线程:

StartMyThread() {

    thread_running = true;
    the_thread = std::thread { [this] {
        while(thread_running) {
          GetData();
        }
    }};
}
Run Code Online (Sandbox Code Playgroud)

thread_runningatomic<bool>在类头中声明的.这是我的GetData功能:

GetData() {
    //Some heavy logic which needs to be executed in a worker thread
}
Run Code Online (Sandbox Code Playgroud)

接下来我还有一个StopMyThread函数,我将其设置thread_running为false,以便它退出while中的while循环lambda block.

StopMyThread() {
  thread_running = false;
  the_thread.join();
}
Run Code Online (Sandbox Code Playgroud)

它运作良好.线程启动和停止而不会崩溃.

此C++代码用于iOS,Android,OS X和Windows.我的应用程序UI有一个按钮,要求我按下按钮启动和停止线程; 这个按钮可以在某些场合经常使用.我可以在停止或启动线程时看到UI中的瞬间延迟.

我的问题是: 在C++中,这是经常启动/停止线程的正确方法吗?我认为通过这种逻辑,我每次都在创建一个新的线程.据我所知,创建一个新线程会使操作系统分配大量新资源,这些资源可能会耗费时间.我认为这是我正在做的错误.我怎么能避免这个?

如何在整个应用程序生命周期中不重复分配新线程的情况下使用相同的线程,并在需要时播放/暂停?

c++ lambda c++11 stdthread c++14

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

在 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
查看次数

将从方法返回的原始指针存储到智能指针中

情形:
我使用从旧的C++库返回一个原始指针到一个方法SomeClass,其中SomeClass从一个库头一个导出类说SomeClass.h

以下是LibraryMethod我使用的签名:

SomeClass* LibraryMethod();
Run Code Online (Sandbox Code Playgroud)

我没有权限更改库.我只使用二进制和公共标题,这是一个典型的场景.

我不想在我的代码中使用原始指针.因此,我有一个共享指针SomeClass在我使用库API的代码的一部分.

std::shared_ptr<SomeClass> some_class;
Run Code Online (Sandbox Code Playgroud)

我这样初始化,以避免存储原始指针 SomeClass

some_class = (std::shared_ptr<SomeClass>)LibraryMethod();
Run Code Online (Sandbox Code Playgroud)

这基本上有效,但我想在这里了解细节

问题:
以上是正确的技术吗?
我在这里造成泄漏吗?
有没有更好的技术来处理这种情况?

c++ c++11 c++14

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

如何在解码 video.mp4 时获取 iOS 中每个视频帧的时间戳

场景:
我正在编写一个iOS 应用程序来尝试解码videoFile.mp4. 我使用AVAssetReaderTrackOutputAVAssetReader来解码视频文件中的帧。这非常有效。videoFile.mp4我基本上使用以下核心逻辑来获取每一帧。

代码:

AVAssetReader * videoFileReader;
AVAssetReaderTrackOutput * assetReaderOutput = [videoFileReader.outputs objectAtIndex:0];
CMSampleBufferRef sampleBuffer = [assetReaderOutput copyNextSampleBuffer];
Run Code Online (Sandbox Code Playgroud)

sampleBuffer这里是每个视频帧的缓冲区。

问题:

  • 如何在这里获取每个视频帧的时间戳?
  • 换句话说,更详细的是,我如何sampleBuffer获得每个返回的时间戳copyNextSampleBuffer

PS:请注意,我需要以毫秒
为单位的时间戳。

objective-c decoder ios avassetreader cmsamplebufferref

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