小编Ste*_*ock的帖子

Android SDK - 离线安装系统映像包

由于IT限制,我无法使用Android SDK的package-install-automation.

为了能够在Androids的AVD管理器中创建模拟器,我首先需要为我的目标设备提供系统映像.但是关于下面的截图,我没有安装任何.

所以任何人都可以告诉我:1.从何处获取Android 6.0 API Level 23的系统映像2.如何手动/离线安装此系统映像

先感谢您!

在此输入图像描述

android android-virtual-device android-sdk-2.3 android-studio

14
推荐指数
2
解决办法
5万
查看次数

C++ 11移动语义与指针 - 性能测量

对于我的用例,我必须非常快速地从列表中插入和删除数据包.

在我看来,有两种常见的解决方法:

  • 插入/删除指向这些数据包的指针
  • 使用移动语义插入/删除副本

无论如何,我认为使用指针的解决方案应该是最有效的,即使你自己的垃圾收集的缺点.

为了更好的比较,我实现了3个测试用例:

  • 使用副本
  • 使用移动语义
  • 使用指针

为了测量每个测试用例的时间,我还实现了一个计时器类:

class HighPerformanceTimer {

public:
    enum TimerResolution {
        SECONDS      = 1,
        MILLISECONDS = SECONDS * 1000,
        MICROSECONDS = MILLISECONDS * 1000,
        NANOSECONDS  = MICROSECONDS * 1000
    };


    explicit HighPerformanceTimer(const TimerResolution resolution = NANOSECONDS)
        : m_resolution(resolution)
        , m_frequency(0.0)
        , m_startTime({0})
        , m_stopTime({0}) {}
    ~HighPerformanceTimer(void) {}


    bool Init(void) {
        LARGE_INTEGER frequency;
        if(0 == ::QueryPerformanceFrequency(&frequency)) {
            return false;
        }

        /* Check for zero divisor. */
        if(0 == frequency.QuadPart) {
            return false;
        }

        /* Change …
Run Code Online (Sandbox Code Playgroud)

performance move-semantics c++11

9
推荐指数
1
解决办法
1374
查看次数

使用const_cast添加const-ness - 坏主意?

众所周知,应避免使用const_cast来删除指针的常量.

但是另一种方式呢?

对于我的用例,我有一个从非const源缓冲区复制数据(字节)的函数.我认为一个好的设计决定是根据源缓冲区完全const来声明参数.

void copyfunction(const char* const data) { ... }
Run Code Online (Sandbox Code Playgroud)

对于像下面这样的函数调用,这将导致指针类型错误'const char*const < - > char*'.

void main() {
    char sourcebuffer[] = {0x00};

    copyfunction(sourcebuffer);
}
Run Code Online (Sandbox Code Playgroud)

当然,现在我可以简单地声明sourcebuffer为const,但在我的情况下,我无法访问该变量,因为它来自不同的代码位置(外部库).

void main() {
    char sourcebuffer[] = {0x00};

    copyfunction(const_cast<const char* const>(sourcebuffer));
}
Run Code Online (Sandbox Code Playgroud)

然而,超出的代码可以工作,但它是好的风格(根据我的用例)?

我认为声明copyfunctionas const 的参数可以确保用户不修改(只读)指针或源缓冲区本身的位置.所以在这种情况下,const_cast只是启用函数调用的必要之恶,而不是故意删除指针的常量......

电贺

c++ pointers const-cast

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

异步过程调用是否被另一个线程中断?

我刚刚意识到我的APC被另一个线程打断了.所以在这一点上我想知道这是怎么回事.据我了解APC的概念:

  • APC不能被正常的用户模式线程中断
  • QueueUserAPC()请求后立即调度APC
  • APC具有运行到完成语义

所以这是我最初的情况:我有一个多线程应用程序(1个主线程,1个接收线程).较低优先级的接收线程是从外部源接收数据.接收线程也通过使用重新激活WaitForSingleObject().接收的数据存储在共享中std::list.主线程实际上没有任何效果.每隔x毫秒发生一次特殊事件,导致接收线程调度APC.此APC在主线程的上下文中运行.

所以这里是整个情况的示例伪源代码.

class Example {

public:
  Example(void) {
    ::DuplicatHandle(
        ::GetCurrentProcess(),
        ::GetCurrentThread(),
        ::GetCurrentProcess(),
        &m_mainthreadHandle,
        THREAD_SET_CONTEXT,
        FALSE,
        0);
  }

  void run(void) {
    ::WaitForSingleObjectEx(m_apcActivation);
  }

protected:

private:
  void rxThread(void) {
    // this seems to be called during the apcRoutine() is running
    // as result the shared list m_rxList is corrupted!
    ::WaitForSingleObject(m_externalActivation);

    Data data = externalReceive();

    if(data.attribute == SPECIAL) {
      ::QueueUserAPC(apcRoutine, m_mainthreadHandle, 0);
    } else {
      m_rxList.push_front(data);
    }
  }

  void apcRoutine(void) {
    while(!m_rxList.empty()) {
      m_rxList.front().print();
      m_rxList.pop_front(); …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading apc

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