小编Ita*_*atz的帖子

iOS:使用UIView的'drawRect:'与其图层的委托'drawLayer:inContext:'

我有一个类,它是一个子类UIView.我可以通过实现drawRect方法或通过实现drawLayer:inContext:哪个是委托方法在视图中绘制内容CALayer.

我有两个问题:

  1. 如何决定使用哪种方法?每个都有一个用例吗?
  2. 如果我实现drawLayer:inContext:,它被调用(并且drawRect不是,至少就断点可以告诉),即使我没有CALayer通过使用以下方式将我的视图指定为委托:

    [[self layer] setDelegate:self];

    如果我的实例未被定义为图层的委托,那么如何调用委托方法?什么机制可以防止drawRectdrawLayer:inContext:调用?

iphone delegates core-animation ios

72
推荐指数
5
解决办法
4万
查看次数

在Qt-Creator中访问gdb控制台

是否可以从Qt-Creator访问gdb控制台?对于检查框架,转储到文件等,似乎是一个微不足道的功能,但我找不到明确的天气存在或不存在的参考.

我在Ubuntu 9.10下使用Qt-Creator 2.0.1

gdb qt-creator

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

在iOS中准确计时

我正在查看iOS SDK中的"Metronome"示例代码(http://developer.apple.com/library/ios/#samplecode/Metronome/Introduction/Intro.html).我正在以60 BPM的速度运行节拍器,这意味着每秒都会打勾.当我看一下外部手表(PC的手表)时,我看到节拍器运行速度太慢 - 它错过了每分钟一次,这就是app.15毫秒的一致错误.相关代码是:

- (void)startDriverTimer:(id)info {    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];       

    // Give the sound thread high priority to keep the timing steady.    
    [NSThread setThreadPriority:1.0];    
    BOOL continuePlaying = YES;   

    while (continuePlaying) {  // Loop until cancelled.   
        // An autorelease pool to prevent the build-up of temporary objects.    
        NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];     
        [self playSound];

        [self performSelectorOnMainThread:@selector(animateArmToOppositeExtreme) withObject:nil waitUntilDone:NO];    
        NSDate *curtainTime = [[NSDate alloc] initWithTimeIntervalSinceNow:self.duration];    
        NSDate *currentTime = [[NSDate alloc] init];  
        // Wake up periodically …
Run Code Online (Sandbox Code Playgroud)

time cocoa-touch ios4 ios

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

h文件中的静态关键字和内部链接

还有一个static问题.我看过以下内容:

我仍然无法理解以下行为:我有一个h文件:

// StaticTest.h
#include <stdio.h>

static int counter = 0;

struct A {
    A () {
        counter++;
        printf("In A's ctor(%d)\n", counter);
    }
    ~A () {
        counter--;
        printf("In A's dtor(%d)\n", counter);
    }
};

static A a;
Run Code Online (Sandbox Code Playgroud)

还有两个cpp文件:

// StaticTest1.cpp
#include "StaticTest.h"

int main () {
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

和:

// StaticTest2.cpp
#include "StaticTest.h"
Run Code Online (Sandbox Code Playgroud)

该计划的输出是:

In A's ctor(1)
In A's ctor(2)
In A's dtor(1)
In A's dtor(0)
Run Code Online (Sandbox Code Playgroud)

现在,A构造函数被调用两次,因为h文件被包含两次,并且因为声明了 …

c++ static one-definition-rule linkage

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

"推动创造新的远程头"问题

我阅读了有关此问题的所有SO问题,但仍然无法解决.我正在使用TortoiseHg.我在一个分支机构工作,现在我想把它合并回主分支.我撤消了在两个分支中进行的所有更改,更新到主分支,并合并(并提交).但是当我试图推动所有这些时,我得到"中止:推送创建新的远程头部"消息.我也试过(正如在SO中的一个问题中所建议的)使用--close-branch选项关闭分支.我唯一没有尝试的是"强迫"推动.

有什么建议?或者是推力唯一的选择?

见截图

version-control mercurial tortoisehg

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

System.Speech.Recognition替代匹配和置信度值

我正在使用System.Speech.Recognition命名空间来识别口语句子.我对识别器提供的替代句子以及他们的置信度分数感兴趣.从[RecognitionResult.Alternates][1]物业的文件:

识别替代品按其置信属性的值排序.给定短语的置信度值表示短语与输入匹配的概率.具有最高置信度值的短语是最可能与输入匹配的短语.

应单独评估每个置信度值,而不参考其他备用值的置信度值.

然而,当我以自信的方式打印已识别的文本,以及他们自信的替代匹配时,我面临两个我无法理解的属性:首先,替代品不是根据置信度排序的(尽管第一个与确认的匹配)文本),其次,对我来说这是一个更大的问题,公认的文本不是具有最高分数的替代方案,这似乎与我上面引用的文档相矛盾.

我在SpeechRecognized事件处理程序中的(不完整的)代码示例:

Console.WriteLine("Recognized text =  {0}, score = {1}", e.Result.Text, e.Result.Confidence); 
// Display the recognition alternates for the result.
foreach (RecognizedPhrase phrase in e.Result.Alternates)
{
    Console.WriteLine(" alt({0}) {1}", phrase.Confidence, phrase.Text);
}
Run Code Online (Sandbox Code Playgroud)

和相应的输出:

Recognized text =  She had said that fit and Gracie Wachtel are all year, score = 0.287724
alt(0.287724) She had said that fit and Gracie Wachtel are all year
alt(0.287724) she had said that fit and gracie wachtel are …
Run Code Online (Sandbox Code Playgroud)

.net c# speech-recognition

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

包括windows.h导致与本地变量名冲突

我在Visual Studio项目windows.h中包含了我的一个h文件(为了使用CaptureStackBackTrace).起初我得到了一些编译器错误,因为使用了min/max std方法和同名的宏windows.h,但这似乎可以解决#define NOMINMAX,正如我在其他SO帖子中所读到的那样.(我说"似乎"因为我不能确定,直到我的整个项目再次建立好).

问题是一些局部变量名称现在破坏了构建.这条线:

int grp1;
Run Code Online (Sandbox Code Playgroud)

在类方法中,导致以下错误:

error C2143: syntax error : missing ';' before 'constant'
Run Code Online (Sandbox Code Playgroud)

如果我将变量名称更改为,则cpp文件编译正常grp1_.

当然我可以改变变量名,但是我感觉我做错了 - 是吗?或者这是包含在内的已知问题windows.h?除了更改变量名之外,还有其他更优雅的解决方案吗?

c++ windows visual-studio

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

性能如何依赖于基础数据值

我有以下C++代码片段(C++部分是此处省略的分析器类),使用VS2010(64位Intel机器)编译.代码简单地将一个float(arr2)数组与一个标量相乘,并将结果放入另一个数组(arr1):

int M = 150, N = 150;
int niter = 20000; // do many iterations to have a significant run-time
float *arr1 = (float *)calloc (M*N, sizeof(float));
float *arr2 = (float *)calloc (M*N, sizeof(float));

// Read data from file into arr2

float scale = float(6.6e-14);

// START_PROFILING
for (int iter = 0; iter < niter; ++iter) {
    for (int n = 0; n < M*N; ++n) {         
        arr1[n] += scale * arr2[n];
    }
}
// …
Run Code Online (Sandbox Code Playgroud)

c c++ performance visual-studio-2010

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

Matlab变量在复制并传递给mex文件时显示"类似引用"的行为

我有一个mex文件(在VS2010中编译,Matlab 2010b),它接受一个变量,然后更改它.例如,在mex文件中,它看起来像:

double *fp = (double *)mxGetPr (prhs[0]);
*fp = someDoubleValue;
Run Code Online (Sandbox Code Playgroud)

为了比较Matlab实现和mex实现,我在调用mex文件之前复制了变量:

var_mex = var;
mymex (var_mex);
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这两个var_mexvar变化(至当然相同的值),因为如果我创建一个参考var,而不是它的一个副本.

这是一个已知的问题?我怎样才能说服Matlab复制变量?

编辑

因为我怀疑这个问题是Matlab优化其内存管理的结果,所以var在调用mex文件之前我做了一些"什么都不做"的计算,即

var=var+1;
var=var-1;
Run Code Online (Sandbox Code Playgroud)

确实它解决了这个问题.如果有人遇到它,我仍然很乐意得到一些关于此的信息(或其他建议).

c matlab mex visual-studio-2010

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

std 并行算法似乎只使用 1 个线程

我正在使用 C++17 并行标准库算法和std::execution::par执行策略。我在一台 4 核笔记本电脑上使用 Ubuntu,使用 clang 11 编译器和 VS Code 的 cmake 扩展进行构建(尽管我也检查了简单的单命令行编译而不使用 cmake)。

根据以下观察,该程序似乎仅使用 1 个线程:

  1. 运行时间与使用相同std::execution::seq(常规、顺序算法)
  2. 使用时top -H,我只看到 1 个线程,CPU 使用率约为 100%
  3. sort使用 Ubuntu 的系统监视器,我看到一个核心在执行过程中处于活动状态(但如果我重复使用 for 循环,则活动核心可能会在不同调用之间发生变化)。

代码示例:

#include <vector>
#include <iostream>
#include <algorithm>
#include <execution>
#include <chrono>
#include <thread>

int main()
{
    const int N = 10000000;
    std::vector<int> vec(N);
    std::chrono::duration<double> elapsed;
    unsigned int nThreads = std::thread::hardware_concurrency();
    std::cout << "number of available threads: " << nThreads << "\n"; // this …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading std c++17

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