小编rod*_*ion的帖子

同时运行多个AsyncTasks - 不可能?

我正在尝试同时运行两个AsyncTasks.(平台是Android 1.5,HTC Hero.)但是,只有第一个被执行.这是一个描述我的问题的简单片段:

public class AndroidJunk extends Activity {
 class PrinterTask extends AsyncTask<String, Void, Void> {
     protected Void doInBackground(String ... x) {
      while (true) {
       System.out.println(x[0]);
       try {
        Thread.sleep(1000);
       } catch (InterruptedException ie) {
        ie.printStackTrace();
       }
      }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new PrinterTask().execute("bar bar bar");
        new PrinterTask().execute("foo foo foo");

        System.out.println("onCreate() is done.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望的输出是:

onCreate() is done.
bar bar bar
foo foo foo
bar bar bar
foo foo foo
Run Code Online (Sandbox Code Playgroud)

等等.但是,我得到的是:

onCreate() is done. …
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask

249
推荐指数
4
解决办法
17万
查看次数

将lambda传递给函数模板

我正在学习C++,我正在尝试实现一个二进制搜索函数,它找到谓词所在的第一个元素.函数的第一个参数是向量,第二个参数是一个计算给定元素的谓词的函数.二进制搜索功能如下所示:

template <typename T> int binsearch(const std::vector<T> &ts, bool (*predicate)(T)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果像这样使用,这可以按预期工作:

bool gte(int x) {
    return x >= 5;
}

int main(int argc, char** argv) {
    std::vector<int> a = {1, 2, 3};
    binsearch(a, gte);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用lambda函数作为谓词,我会收到编译器错误:

search-for-a-range.cpp:20:5: error: no matching function for call to 'binsearch'
    binsearch(a, [](int e) -> bool { return e >= 5; });
    ^~~~~~~~~
search-for-a-range.cpp:6:27: note: candidate template ignored: could not match 'bool (*)(T)' against '(lambda at
      search-for-a-range.cpp:20:18)'
template <typename T> int …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates function-pointers c++11

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

加载大对象后测量堆大小的增加

我很想知道加载大对象时python堆总大小的增加.很多似乎是我需要的,但我不明白结果.

我有一个350 MB的pickle文件DataFrame,里面有一个pandas ,其中包含大约250万个条目.当我加载文件并在之后使用heapy检查堆时,它会报告只有大约8 MB的对象已添加到堆中.

import guppy
h = guppy.hpy()
h.setrelheap()
df = pickle.load(open('test-df.pickle'))
h.heap()
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

Partition of a set of 95278 objects. Total size = 8694448 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  44700  47  4445944  51   4445944  51 str
     1  25595  27  1056560  12   5502504  63 tuple
     2   6935   7   499320   6   6001824  69 types.CodeType
...
Run Code Online (Sandbox Code Playgroud)

是什么让我困惑的是Total size8694448 bytes.那只是8 MB.

为什么不Total size反映整体的大小 …

python pandas heapy

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

使用PTRACE_SINGLESTEP计算进程的机器指令

在Linux机器上,我使用带有PTRACE_SINGLESTEP参数的ptrace来计算程序的机器指令数.我遵循了这篇文章:http://www.ncsu.edu/it/mirror/ldp/LDP/LGNET/81/sandeep.html.

但是,结果对我来说似乎很奇怪.对于一个非常简单的程序,计算超过95000台机器指令.测试程序是

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

这里发生了什么?该文章的代码是错误的吗?(我看不出它有什么问题.)如果没有,是什么导致这么简单的程序要求> 95000指令?

c linux debugging ptrace

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

来自IPython并行引擎的实时输出?

我正在使用IPython强大的并行化功能运行一堆长时间运行的任务.

如何在我的IPython客户端中从ipengines的stdout获得实时输出?

例如,我正在运行dview.map_async(fun, lots_of_args)fun打印到stdout.我希望看到输出正在发生.

我知道AsyncResult.display_output(),但它只所有任务完成后才可用.

ipython ipython-parallel

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