我一直在研究一个程序,通过测试我发现我可能需要包含一个辅助可执行程序来运行该程序,这不是一个包含的程序,但是我已经编写了一个,我搜索过谷歌以及此处,没有文档。我使用Eclipse作为我的IDE,所以我不能使用任何Visual Studios工具。 这是一个基于Windows的应用程序。
答案 0 :(得分:0)
这是安装程序或平台特定可执行格式的问题。
您应该使用OS API来执行辅助程序。
我建议您将辅助程序与可执行文件和其他库一起打包。这可以通过使用安装程序实用程序(特定于平台)来执行。
将数据放在可执行文件中不在标准C ++语言的范围内。
答案 1 :(得分:0)
我无法使用可执行文件中的代码,因为它使用了while循环 操作,它必须与我试图运行的代码并行运行
您的意外回复...是什么阻止您运行'辅助可执行文件'作为现有可执行文件中的线程?
考虑:如果'辅助可执行文件'代码是打包的#39;作为' main()',(并且您有代码),您可以简单地重命名' main'或许其他东西,也许' foo()',也许' main2(int,char **)',甚至' secondary_executable(int,char **)& #39; ...
// rename secondary executable 'main' to
void foo(int argc, char* argv[])
{
// example for test purposes ... input echo
std::cout<< "\n " << argc;
for (int i = 1; i<argc; ++i) std::cout << " " << argv[i];
std::cout << std::endl;
// for test purposes - do something for 50 ms
for (int i = 0; i < 5; ++i) {
std::cout << "foo executing << " " << i << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
然后,在你的&#39; main&#39;的某个地方,你做了类似的事情(未经测试,未编译):
std::thread t2(foo, argc, argv); // pass both by value
此语句启动并行运行的线程(t2)。
如果必须同步其终止,请添加适当的联接。
这个辅助设备是否需要比原设备更多的argv?
由于argv只是一个字符串列表,因此您可以将新的argv添加到参数列表中(以及对文档的描述,以及对用户提示的更新,等等) 。)
如果您的辅助可执行文件不是C ++(也不是C),我认为要考虑的后退方法是从C ++代码中fork或popen()辅助可执行文件。在* nix上,辅助可执行文件将作为并行进程运行,具有管道接口。