【问题标题】:C++ Send e-mail at exitC++ 在退出时发送电子邮件
【发布时间】:2016-01-14 03:41:07
【问题描述】:

我想要做的是在退出我的程序时发送一封电子邮件。 我使用atexit(); 函数来执行此操作,但是...它无法正常工作。

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

void SendEmail()
{
    //lot of code here
}

void Print()
{
    std::cout << "Bye!";
    system("pause");
}

void Terminate()
{
    SendEmail(blahblah); // Doesn't work
    Print(); // Works
}

int main()
{
    atexit(Terminate);

    while (true) Sleep(1);
    return 0;
}

SendEmail(); 函数是否花费了太多时间并且什么都不做?它甚至不打印服务器响应(在main(); 中使用时效果很好)

【问题讨论】:

  • 好吧,您的示例中的 SendEmail() 函数不采用 blahblah 参数,甚至在您的示例中都没有定义。然后我敢说问题出在//lot of code here 的某个地方……你之前有没有在main() 中成功地尝试过你的real SendEmail()
  • 注册的atexit 处理程序仅在正常退出期间运行,而不是在进程被终止时运行......并且您没有为正常退出留下任何机制。
  • 欢迎来到编程,遇到任何问题的第一步都是将问题分解为更小的可管理任务。例如,在这种情况下,当您将SendEmail() 更改为不属于atexit() 时,您是否知道它是否有效?如果您不知道这一点,请在寻求帮助之前了解这一点。
  • 你是如何退出你的程序的? CTRL+C? kill -KILL pid ? TerminateProcess() ?崩溃了?
  • 编译所有警告和调试信息(例如g++ -Wall -Wextra -g,如果使用GCC....)然后使用调试器(例如gdb),特别是通过在 SendEmail 函数上设置断点

标签: c++ email send atexit


【解决方案1】:

在运行atexit 之前,您不知道其他资源已被关闭。这些对于SendMail 的成功运行可能很重要。

【讨论】:

  • 操作系统直到 之后 atexit. 才参与其中
  • 我相信操作系统与在 linux 或 Windows 上运行任何程序有着千丝万缕的联系。但我想我知道你想说什么。我已经编辑过了。
  • 实际上,操作系统大多不涉及,因为那样太慢了。从程序切换到操作系统并返回是一个昂贵的上下文切换。
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 2013-07-14
  • 2014-10-25
相关资源
最近更新 更多