使用 gcc/g++ 使 C++ 程序在没有窗口的情况下运行? [复制]

Posted

技术标签:

【中文标题】使用 gcc/g++ 使 C++ 程序在没有窗口的情况下运行? [复制]【英文标题】:Make a C++ Program Run without a Window Using gcc/g++? [duplicate] 【发布时间】:2017-09-14 04:02:02 【问题描述】:

我有一个非常简单的程序;它永远播放由循环路径定义的单个音频文件,直到程序终止。代码在这里:

#include <windows.h>
#include <mmsystem.h>
#include <iostream>

using namespace std;

int main(void) 
    PlaySound("C:\\Users\\Ben\\Desktop\\silence.wav", NULL, SND_LOOP | SND_ASYNC | SND_FILENAME);
    cin.get();
    return 0;

程序本身运行良好,但正如您所料,它会生成一个空白控制台窗口,就像任何程序一样。但是由于我想让这个程序在后台运行并且不可见,我是否可以编写它以便它根本没有窗口?我意识到如果我这样做了,唯一的出路就是从流程管理器中结束它,但这很好。另外,我只想在代码中/从 g++ 编译器中执行此操作;我尝试阅读有关使用 Visual Studio 执行此操作的信息,但我永远无法让它工作,而且对于这种规模的东西似乎真的没有必要。感谢您的建议。

【问题讨论】:

它不是重复的——OP 明确指出:“有可能.. 它根本没有窗口吗?” 【参考方案1】:
int main()

  FreeConsole();
  PlaySound(...);
  ...

这种程序只能从任务管理器中杀死。您可能需要考虑设置某种 IPC,以便您可以指示现有实例关闭声音并退出。

【讨论】:

当我这样做时,窗口只是短暂显示然后消失。我检查了任务管理器,该进程没有运行。除此之外,我没有对我的代码进行任何修改。此外,我尝试了上面的链接,这个问题被标记为重复,但这对我不起作用;它可以构建,但是当我运行它时,什么也没有发生,而且我在任务管理器中也看不到它。 如果您没有控制台,cin.get() 将无法工作。请改用Sleep(INFINITE); 有道理,感谢您指出这一点。到时候我会把它标记为答案,虽然我要到明天才能测试它。 如果你使用Sleep(INFINITE),那么杀死你的程序的唯一方法就是通过任务管理器。 @Dúthomhas 这正是我想要的。它应该类似于 Windows 服务或类似的东西。

以上是关于使用 gcc/g++ 使 C++ 程序在没有窗口的情况下运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

gcc/g++ 实战之编译过程

gcc/g++ 实战之编译的四个过程

gcc 与 g++的区别

使用自定义构建的 gcc(g++) 构建 c++ 项目

用 gcc/g++ 编译器编译 c++

G++和GCC和C,C++有啥区别的