【问题标题】:Android NDK: Infinite Loop Not Being Called InfinitelyAndroid NDK:无限循环不会被无限调用
【发布时间】:2015-11-10 02:13:34
【问题描述】:

我正在使用 NDK 为 Android 编写一个实用程序。

在我的实用程序中,我派生了一个进程,并在该进程中运行以下代码:

//Screenshot thread
int i = 0;
for (;;) {
  char filename[255];
  snprintf(filename, sizeof(filename),
    "/data/local/screenshots/screen%d.png", i);
  execlp("screencap", "screencap", "-p", filename, NULL);
  i++;
  sleep(500);
}

我发现屏幕截图是在第一次时间创建的,但没有拍摄后续的屏幕截图。当我停止程序时,我发现我有一个screen0.png 文件,但没有screen1.png 或任何后续文件。我确保阅读了文档,看来 Android sleep 函数需要一个毫秒参数。

有什么想法吗?

【问题讨论】:

    标签: android c android-ndk java-native-interface


    【解决方案1】:

    来自execve(2)手册页

    返回值

           exec() 函数仅在发生错误时返回。返回值为-1,设置errno表示错误。

    因此循环在exec() 调用时被阻塞并一直停留在那里,除非发生错误。

    【讨论】:

    • 这对这个问题有影响吗?这正是 POSIX 指定的方式。这肯定有充分的理由。
    • @njzk2 exec 在同一进程中用不同的程序覆盖当前程序。它不会创建新进程。
    • @njzk2 因为在没有exec() 的情况下fork() 是一些合法的用例。反之亦然。
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多