- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在需要时推送一系列清理功能。我使用 atexit 为一个没有任何参数的清理函数执行此操作,但我不确定如何将这种方法扩展到多个清理函数。我对 boost::bind 不是很熟悉,但我认为这是个好主意,因为这就是我将函数绑定(bind)到线程的方式...
在 C++ 中,我试图让以下内容工作:
函数定义
static void closeAnimation(string prefix="");// static member of fileWriter
代码:
atexit(boost::bind(fileWriter::closeAnimation, "0")); // I want to first prefix to be "0"
错误:
cannot convert ‘boost::_bi::bind_t<void, void (*)(std::basic_string<char>), boost::_bi::list1<boost::_bi::value<const char*> > >’ to ‘void (*)()’ for argument
提前致谢!
最佳答案
没有“不使代码复杂化的单行解决方案”。
最糟糕的解决方案是将该参数存储在全局变量中,并在 atexit
处理程序中检索它
由于您使用的是 C++,因此静态变量的析构函数也可以用作 atexit
处理程序。然后您可以在该静态变量的构造函数中传递参数以进行参数化,例如
struct AtExitAnimationCloser
{
const char* _which_param;
AtExitAnimationCloser(const char* which_param) : _which_param(which_param) {}
~AtExitAnimationCloser() { FileWriter::closeAnimation(_which_param); }
};
void f()
{
printf("entering f\n");
static AtExitAnimationCloser s0 ("0"); // registers closeAnimation("0") at exit
static AtExitAnimationCloser s1 ("1"); // registers closeAnimation("1") at exit
printf("leaving f\n");
}
演示:http://www.ideone.com/bfYnY
注意静态变量绑定(bind)到它们的名字,所以你不能说
for (it = vecs.begin(); it != vecs.end(); ++ it)
{
static AtExitAnimationCloser s (*it);
}
为所有内容调用atexit
。但是你可以让静态变量本身占据整个范围
static AnotherAtExitAnimationCloser s (vecs.begin(), vecs.end())
最后,使用惯用的 C++,我认为您不需要使用这些技巧...您可以存储 T
类型的 vector ,它在销毁时 ~T
调用 fileWriter::closeAnimation
。
关于c++ - 将值传递给 atexit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8053000/
我正在尝试在 Python 中运行一个简单的多进程应用程序。主线程生成 1 到 N 个进程并等待它们全部完成处理。每个进程都运行一个无限循环,因此它们可能会永远运行而不会受到用户的干扰,因此我放入了一
用atexit()注册的函数是最后执行的函数吗?有没有可能此时其他线程还在运行? 最佳答案 Are the functions registered with atexit() the last fu
我可以将常规函数指针传递给atexit(): void f1(void) { printf("f1\n"); } int main() { void (*fun_ptr)(void)
我可以将常规函数指针传递给atexit(): void f1(void) { printf("f1\n"); } int main() { void (*fun_ptr)(void)
是否可以注销退出处理函数??? void exit_handler_1() { printf("in first exit handler\n"); } int main() { if
我知道什么时候函数的地址传递给atexit函数, 该函数被执行。 #include int atexit(void (*func) void)); 但是,使用atexit函数的目的是什么? 词义本身
当我运行 python 脚本时,我可以退出解释器,并且 atexit 将执行我注册的所有函数。 现在,我正在使用 Airflow ,并希望触发 atexit 任务 on_kill() (即,当我清除或
在我的程序中,我使用了一个静态变量(没有其他办法),问题是它需要在退出时被释放。 如何在不必将此变量声明为全局变量的情况下实现这一点? 我在想atexit 函数,但它似乎不能带参数。有什么技巧可以传递
我有一个 C 程序在 Linux 上意外退出,我很难找出原因(没有核心转储,请参阅 XIO: fatal IO error 11)。我在程序的开头放置了一个 atexit() 并且当崩溃发生时确实调用
我想在需要时推送一系列清理功能。我使用 atexit 为一个没有任何参数的清理函数执行此操作,但我不确定如何将这种方法扩展到多个清理函数。我对 boost::bind 不是很熟悉,但我认为这是个好主意
在一个共享库中,函数 func1() 有 atexit(terminate_global) 而这个共享库没有 'attribute ((constructor))' 和 'attribute ((析构
我有两个 python 文件: a.py: import subprocess, time, os, signal myprocess = subprocess.Popen("b.py", shell
我正在用 C++ 编写调试器,退出时我需要它来清除在调试对象中设置的所有断点。 我制作了一个名为 BREAKPOINT_INFO 的 struct,其中包含清除每个断点所需的信息。进程句柄(hProc
有几个教程解释了 atexit() 函数的用法,例如: http://linux.die.net/man/3/atexit 例子在一个简单易懂的main函数中给出。但是,我在我的程序中创建了一个共享库
如果我将 atexit( fn ); 放在退出堆栈上,它将在程序退出时执行:从 main() 返回或通过 exit ()。 我可以将它从堆栈中移除吗? 你问我为什么要这样做? 我正在使用 atexit
在图书馆等大型项目中使用 atexit 是否存在固有的危险? 如果是这样,atexit 背后的技术本质是什么可能导致大型项目出现问题? 最佳答案 我避免在库中使用 atexit 的主要原因是它的任何使
我们遇到了一个问题,即第 3 方库使用 atexit() 注册了一些函数。有什么方法可以知道注册了多少(或哪些)功能? 我检查了here但它说不。 我尝试使用 sysconf 获取 ATEXIT_MA
有什么方法可以在 atexit 模块中注册并在退出时调用的函数中设置退出代码吗?调用 sys.exit(code) 会产生错误,并且不会将退出代码设置为所需的值。 d:\>python atexit_
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 7 年前。 Improv
我的代码工作得很好,但是当我退出 simpleshell 时,我遇到了段错误。 atexit(final) 的决赛仍然被调用并且正常工作。我认为问题出在 atexit() 上,因为当从代码中删除 at
我是一名优秀的程序员,十分优秀!