小编Mar*_*ata的帖子

运行结束循环 - 自动释放池恢复

据我所知,一旦自动释放的池被释放,自动释放的对象就会被清除.现在,自动释放池将在运行循环结束时释放.

我的问题是,如果在我的课程中,我没有创建自定义自动释放池并在该类中的某些对象上调用autorelease方法,那么这些对象将被恢复?"运行循环结束"是否暗示"应用程序结束"?

iphone cocoa-touch objective-c nsautoreleasepool ios

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

#ifdef与预编译头文件无法正常工作

我有一些代码如下:

#define FEATURE_A 1

void function()
{
// some code

#ifdef FEATURE_A
    // code to be executed when this feature is defined
#endif

// some code

}
Run Code Online (Sandbox Code Playgroud)

该程序不会在#ifdef - #endif中执行代码.但是,当我将#ifdef更改为#ifndef并删除#define宏时,代码就会被执行.下面的代码按预期工作.

//#define FEATURE_A 1

void function()
{
// some code

#ifndef FEATURE_A
    // code to be executed when this feature is defined
#endif

// some code

}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么在#ifdef中的第一个案例代码- #endif没有执行,在第二种情况下它工作?谁能告诉我什么设置可能是错的?

不知道是不是这件事,我正在使用visual studio 2010.

提前致谢

更新: 当我清理并重新运行时,第二个也无法正常工作.它只在编辑器中显示为启用的代码.

当我在project-> property-> Configuration Properties-> c/c …

c++ macros

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

仅当在 ctest 中运行时测试可执行文件才会失败

当我使用 cmake () 的 ctest 接口add_test(...)并运行 make 目标时make test,我的几个测试失败了。当我直接从二进制构建文件夹在命令行运行每个测试时,它们都可以工作。

我可以用什么来调试这个?

cmake googletest ctest

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

如何减少Python中的线程切换延迟

我有一个Python 2.7应用程序,它有3个生产者线程和1个连接到a的消费者线程Queue.queue.我正在使用getput,并且生产者线程将大部分时间用于阻塞IO(从串口读取) - 基本上什么都不做.基本上打电话serial.read()......

但是,我似乎有一个我称之为生产者线程放入队列的时间与消费者线程从队列中获取的时间之间的高延迟,例如25毫秒(我正在运行1个处理器Beagle Bone Black(1GHz) )在Angstrom Linux上).

我认为如果所有进程都被阻塞,那么putget之间经过的时间应该非常小,几微秒左右,而不是几十毫秒,除非消费者线程实际上很忙(这不是这里的情况) ).

我在线阅读了一些内容,表明Python对繁忙的旋转感到愧疚,并且Python中的GIL应该受到指责.我想我宁愿不知道原因,只是得到更敏感的东西.我对串行传输的实际延迟(约1-2毫秒)很好.

代码看起来基本上就像

q = Queue.queue

def a1(): 
   while True:
      p = read_serial_packet("/dev/ttyO1")
      p.timestamp = time.time()
      q.put(p)

def a2(): 
   while True:
      p = read_serial_packet("/dev/ttyO2")
      p.timestamp = time.time()
      q.put(p)

def a3(): 
   while True:
      p = read_serial_packet("/dev/ttyO3")
      p.timestamp = time.time()
      q.put(p)

def main():
   while True:
      p = q.get()
      d = time.time() - p.timestamp
      print str(d)
Run Code Online (Sandbox Code Playgroud)

并有4个线程运行 …

python multithreading

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

使用SIMD将10位值打包到字节流中

我正在尝试使用SIMD指令将10位像素打包到连续的字节流中.下面的代码"原则上",但SIMD版本比标量版本慢.

问题似乎是我无法找到有效加载寄存器的良好聚集/分散操作.

有任何改进建议吗?

// SIMD_test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "Windows.h"
#include <tmmintrin.h>
#include <stdint.h>
#include <string.h>

// reference non-SIMD implementation that "works"
// 4 uint16 at a time as input, and 5 uint8 as output per loop iteration

void packSlow(uint16_t* ptr, uint8_t* streamBuffer, uint32_t NCOL)
{
    for(uint32_t j=0;j<NCOL;j+=4)
    {
        streamBuffer[0] = (uint8_t)(ptr[0]);
        streamBuffer[1] = (uint8_t)(((ptr[0]&0x3FF)>>8) | ((ptr[1]&0x3F) <<2));
        streamBuffer[2] = (uint8_t)(((ptr[1]&0x3FF)>>6) | ((ptr[2]&0x0F) <<4));
        streamBuffer[3] = (uint8_t)(((ptr[2]&0x3FF)>>4) | ((ptr[3]&0x03) <<6));
        streamBuffer[4] …
Run Code Online (Sandbox Code Playgroud)

c++ x86 bit-manipulation simd

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

CMake:是否可以仅从静态库构建可执行文件而无需源代码?

我想只从静态库(即.a文件)构建一个可执行文件.这是可能的,因为该main()函数包含在其中一个库中.

add_executable()功能要求我提供至少一个源文件.但这不是我想要做的.

cmake

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

如何在不关闭xterm的情况下捕获SIGINT?

这是我的剧本;

#!/bin/bash
trap '' SIGINT
xterm  &
wait
Run Code Online (Sandbox Code Playgroud)

我运行它并弹出一个xterm.然后我将键盘对准原始终端窗口并点击^C.我不想发生任何事情,但相反,孩子xterm消失了.

(理想情况下,我想安装自己的陷阱处理程序,但这是一个小步骤)

使用disown后分叉xterm从父分离xterm然后^C不对xterm做任何事情,但后来wait不起作用.

我只是想阻止SIGINT进入xterm.

bash signals

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

如何仅从虚拟地址获取内存段的页面大小?

Linux 可以同时拥有标准 4KiB 页面内存和 1GiB(巨大)页面内存(以及 2MiB 页面,但我不知道是否有人使用它)。

是否有从任意虚拟地址获取页面大小的标准调用?指针可能指向 4K 页或大页。

手头的问题是对assert(...)需要基地址和区域大小必须是页面大小的倍数的函数的参数进行健全 ( ) 检查,然后传递给mbind. 但是页面大小因系统而异。如果没有健全性检查,mbind只给出的返回值Invalid argument对调试没有帮助。

我看过这个答案How to get linux kernel page size programmatically但它给出的答案假设整个系统是相同的,而且它们也是编译时常量。也getpagesize()做同样的事情,无论如何它都被弃用了。

c numa

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

如果已安装TortoiseGit,如何从命令行运行git.exe?

我无法从CMD控制台窗口运行git.我需要运行它,因为TortoiseGit不够聪明,无法接受自签名证书来导入SVN存储库.我需要在命令行运行git.exe.

git.exe svn clone "https://eaxmple.net/svn"  "C:\xxx\git" -T trunk

Initialized empty Git repository in c:/xxx/git/.git/
Error validating server certificate for 'https://esample.net:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: xxx.net
- Valid: from Jul 23 00:00:00 2012 GMT until Jul 23 23:59:59 2017 GMT
- Issuer: Register.com, US
- Fingerprint: ax:2x:bx:x6:7x:c8:ae:82:01:bx:4a:77:51:dd:9d:6d:e5:63:42:39
(R)eject, accept (t)emporarily or accept (p)ermanently? RA layer request failed: PROPFIND request failed on '/svn': PROPFIND …
Run Code Online (Sandbox Code Playgroud)

svn git tortoisegit

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

我正在寻找通过DMA而不是中断在MSP430上为USCI(UART)提供服务的示例代码

我有通过中断读取USCI(UART)的"正常"代码,但TI SimpliciTI堆栈是CPU占用的,并且在维护无线电时它会丢弃UART字节.

我假设DMA是可行的方法,但我找不到使用USCI作为输入的DMA的完整示例.

msp430 dma uart

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