由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于在c++ member function里用signal( )
相关主题
这个function pointer最后的那个int是什么意思?请教C++程序中手动Ctrl+C后,如何才可以调用一下自己写的退出函数
问个g++的问题问个GSL的问题
请问如何给sigalrm_handler传递参数perl & apache - cannot use param and other stuff - Internal Server Error
GCJ2009one question
关于signal handlerbash中怎样进行变量名递归替换?
C signal SIGFPE 问题[合集] 问个递归的问题
重复利用threads的问题Python 下载数据请教。
HELP:这个死锁是怎么发生的?How to call python_function(class param, char *buf) from c++
相关话题的讨论汇总
话题: handler话题: pme话题: param话题: int话题: my
进入Programming版参与讨论
1 (共1页)
w*s
发帖数: 7227
1
linux里这个例子
void my_handler (int param)
{
signaled = 1;
my_handler2(...);
}
int main ()
{
signal (SIGINT, my_handler);
}
如果my_handler, my_handler2是c++ member function,那么怎么整?
我老用了巨复杂的办法,奶奶的。。。
A********i
发帖数: 97
2
void my_handler (int param)
{
std::unique_ptr ptr (new classImpl(...));
ptr->my_handler(...);
ptr->my_handler2(...);
}
s******u
发帖数: 501
3
std::bind()

【在 w*s 的大作中提到】
: linux里这个例子
: void my_handler (int param)
: {
: signaled = 1;
: my_handler2(...);
: }
: int main ()
: {
: signal (SIGINT, my_handler);
: }

w*s
发帖数: 7227
4
高深

【在 A********i 的大作中提到】
: void my_handler (int param)
: {
: std::unique_ptr ptr (new classImpl(...));
: ptr->my_handler(...);
: ptr->my_handler2(...);
: }

w*s
发帖数: 7227
5
完整句子怎么写?

【在 s******u 的大作中提到】
: std::bind()
A********i
发帖数: 97
6
classImpl cl;
auto my_handler = std::bind(&classImpl::my_handler, std::ref(cl), ...other
params.. )
http://en.cppreference.com/w/cpp/utility/functional/bind
w***g
发帖数: 5958
7
signal里传进去的不能是成员函数。只能把对象指针放到全局变量里,
然后在sighandler里调用全局变量的方法。
std::bind返回的是个对象,不是函数指针,没法传入signal里。

【在 w*s 的大作中提到】
: linux里这个例子
: void my_handler (int param)
: {
: signaled = 1;
: my_handler2(...);
: }
: int main ()
: {
: signal (SIGINT, my_handler);
: }

s******u
发帖数: 501
8
hmm,没错,signal handler只能是函数指针,没法用bind
另外也可以用class static member function,这样不需要另外定义全局变量和free
function,当然这个handler相应的也不知道class的状态了

【在 w***g 的大作中提到】
: signal里传进去的不能是成员函数。只能把对象指针放到全局变量里,
: 然后在sighandler里调用全局变量的方法。
: std::bind返回的是个对象,不是函数指针,没法传入signal里。

p****o
发帖数: 96
9
谢大牛,帮我看看这样下面的可以吗?
class A {
public:
void my_handler(int param);
void my_handler2(int param);
};
//member function implementations ...
//In C file:
#include
typedef void (*handler_t)(int);
int main ()
{
A a;
handler_t h1, h2;
h1 = &a.my_handler;
h2 = &a.my_hander2;
signal(SIGINT, h1);
signal(SIGINT, h2);
}

【在 w***g 的大作中提到】
: signal里传进去的不能是成员函数。只能把对象指针放到全局变量里,
: 然后在sighandler里调用全局变量的方法。
: std::bind返回的是个对象,不是函数指针,没法传入signal里。

A********i
发帖数: 97
10
这样做是不对的。The types of pointer to member function and pointer to
function are different.
https://isocpp.org/wiki/faq/pointers-to-members
链接里第二个问题给了解法,跟wdong给的一样。

【在 p****o 的大作中提到】
: 谢大牛,帮我看看这样下面的可以吗?
: class A {
: public:
: void my_handler(int param);
: void my_handler2(int param);
: };
: //member function implementations ...
: //In C file:
: #include
: typedef void (*handler_t)(int);

s**y
发帖数: 151
11
// A.hpp
class A
{
public:
A();
~A();
static void my_handler(int param);
private:
void handler(int param);
static A *pMe;
};
// A.cpp
static A::pMe = 0;
A::A()
{
pMe = this;
}
A::~A()
{
}
void A::my_handler(int param)
{
if (0 != pMe)
{
pMe = new A();
}
if (0 != pMe)
{
pMe->handler(param);
}
}
void A::handler(int param)
{
// handle the param here
}
//In C file:
#include
#include "A.hpp"
int main ()
{
signal(SIGINT, A::my_handler);
}
1 (共1页)
进入Programming版参与讨论
相关主题
How to call python_function(class param, char *buf) from c++关于signal handler
问个程序问题C signal SIGFPE 问题
how to get client locale inside the running application?重复利用threads的问题
c# question: char_array.ToString() is not working ?HELP:这个死锁是怎么发生的?
这个function pointer最后的那个int是什么意思?请教C++程序中手动Ctrl+C后,如何才可以调用一下自己写的退出函数
问个g++的问题问个GSL的问题
请问如何给sigalrm_handler传递参数perl & apache - cannot use param and other stuff - Internal Server Error
GCJ2009one question
相关话题的讨论汇总
话题: handler话题: pme话题: param话题: int话题: my