AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 407109
Accepted
WDR
WDR
Asked: 2017-11-27 04:24:48 +0800 CST2017-11-27 04:24:48 +0800 CST 2017-11-27 04:24:48 +0800 CST

在 C++ 代码中使用 system() 函数与使用源代码一样快速吗?[关闭]

  • 772
关闭。这个问题是题外话。它目前不接受答案。

这个问题似乎与帮助中心定义的范围内的 Unix 或 Linux 无关。

4年前关闭。

改进这个问题

据我所知,我可以使用system()函数在我的 C++ 代码中使用 Linux 终端的命令。例如system("aplay sound.wav");. 我不知道我是否可以像这样编写所有 Linux 命令,但是aplay可以。

我想espeak在我的 C++ 程序中使用。我喜欢 espeak 读取我通过它传递的每个字符串(类似于aplay上面代码中的内容,但尊重“字符串”)。是通过函数调用它更好,system()还是在我的 C++ 代码中编写这样的代码并char* text在我想读取新字符串时更改?:

#include <string.h>
#include <malloc.h>
#include <espeak-ng/speak_lib.h>


espeak_POSITION_TYPE position_type;
espeak_AUDIO_OUTPUT output;
char *path=NULL;
int Buflength = 500, Options=0;
void* user_data;
t_espeak_callback *SynthCallback;
espeak_PARAMETER Parm;



char Voice[] = {"English"};


char *text = {"this is a english test"};
unsigned int Size,position=0, end_position=0, flags=espeakCHARS_AUTO, *unique_identifier;




int main(int argc, char* argv[] ) 
{
    output = AUDIO_OUTPUT_PLAYBACK;
    int I, Run = 1, L;    
    espeak_Initialize(output, Buflength, path, Options ); 
    espeak_SetVoiceByName(Voice);
    const char *langNativeString = "en"; //Default to US English
    espeak_VOICE voice;
        memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first
        voice.languages = langNativeString;
        voice.name = "US";
        voice.variant = 2;
        voice.gender = 1;
        espeak_SetVoiceByProperties(&voice);
    Size = strlen(text)+1;    
    espeak_Synth( text, Size, position, position_type, end_position, flags,
    unique_identifier, user_data );
    espeak_Synchronize( );
    return 0;
}

哪个更快?

c++ system-calls
  • 1 1 个回答
  • 1528 Views

1 个回答

  • Voted
  1. Best Answer
    Hilton Fernandes
    2017-11-27T09:01:45+08:002017-11-27T09:01:45+08:00

    我的简短回答是肯定的。

    请确认我是否理解您的要求。

    请考虑调用系统时会发生什么:

    1. 您的程序将开始执行 shell;
    2. 这个 shell 会读取你传递给它的命令行;
    3. shell 将启动你传递给 system() 的程序——在你的情况下它是espeak;
    4. 该程序将接收您传递给它的选项;
    5. 最后,程序将执行。

    因此,当您使用 时,从 1 到 3(可能还有 4)的项目都是开销system(),而不是当您在源代码中启动相同的功能时。

    如果您找到一种方法来espeak通过程序中的函数调用来调用相同的功能,那么您将获得更快的响应时间。

    我不知道espeak,所以我将尝试笼统地回答。

    • 第一,在源代码中拥有与正在运行的程序相同的功能并不总是那么容易。一些程序的功能分布在无数选项中,可能很难理解这一点并在代码中创建一个函数来执行您可以通过命令行轻松表达的功能;
    • 第二,您必须评估转型的成本效益。使用当前的高性能处理器和过多的内存,启动一个 shell 然后你的程序可能不会花费太多时间。如果您只开始espeak几次,并且要说相对较长的文本,那么这种开销尤其可以忽略不计。
    • 2

相关问题

  • 内核模式位

  • 需要一些系统调用

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve