Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gtkmm与g_信号处理程序_块_by_func()等价的是什么?_C++_C_Gtkmm - Fatal编程技术网

C++ gtkmm与g_信号处理程序_块_by_func()等价的是什么?

C++ gtkmm与g_信号处理程序_块_by_func()等价的是什么?,c++,c,gtkmm,C++,C,Gtkmm,我需要阻止我自己(间接)发出的信号 在C语言中,可以使用g_signal_handlers_block_by_func()和姐妹函数unblock < C++ > GTKMM中的什么?< /P> 我有一个gtkmm dlna播放器,它每秒向Gtk::HScale Widet发出已更改的信号,因为它(从外部)收到刚刚播放的歌曲发出的信号。然后我寻找一个位置,就是电流的位置,它使歌曲在瞬间倒退 我想阻止对seek的更改,因为我看到一个C程序使用g_signal_handlers_block_by_f

我需要阻止我自己(间接)发出的信号

在C语言中,可以使用g_signal_handlers_block_by_func()和姐妹函数unblock

< C++ > GTKMM中的什么?< /P> 我有一个gtkmm dlna播放器,它每秒向Gtk::HScale Widet发出已更改的信号,因为它(从外部)收到刚刚播放的歌曲发出的信号。然后我寻找一个位置,就是电流的位置,它使歌曲在瞬间倒退

我想阻止对seek的更改,因为我看到一个C程序使用g_signal_handlers_block_by_func实现了这一点。

因为ptomato询问:

我从未意识到,connect方法有一个有价值的返回值:

如果你像这样连接信号:

mywidget_connection = mywidget.signal_value_changed().connect(sigc::mem_fun(*this, &MyClass::on_value_changed ));
mywidget_connection.block();
mywidget.set_value(new_value);
mywidget_connection.unblock();
在我的情况下,有两种方法可以更改值: 1.)有人拉滑块:应该更新值并搜索 2.)计时器出现并告知新位置:应更新值,但不搜索

然后您可以按如下方式阻止/取消阻止:

mywidget_connection = mywidget.signal_value_changed().connect(sigc::mem_fun(*this, &MyClass::on_value_changed ));
mywidget_connection.block();
mywidget.set_value(new_value);
mywidget_connection.unblock();

这不会发出更改后的信号。

我自己找到的:connect调用的返回值具有阻止/取消阻止方法。您可以将其作为答案发布,以回答您自己的问题!我想这正是我需要的!非常感谢您对您的情况和解决方案的清晰解释……但是,现在我再看一遍,它值得一提的是,返回对象的类型是,从C++的回调库中,通过*>代码代码>库。为什么在任何地方都没有记录?