在Cassandra中使用回调功能
Using Callback function in Cassandra
我想获得有关在Cassandra中实现回调功能的正确方法的建议。
我使用Cassandra的C 驱动程序制作了一些API。下面给出的是我如何使用回调函数执行我的查询(l_stmt是准备好的语句,rtinsertcallback是回调函数(:
CassFuture * l_query_future = cass_session_execute(RtConnectionObj::ms_session, l_stmt);
CassError l_returnCode = cass_future_set_callback(l_query_future,rtInsertCallback,NULL);
if(l_returnCode != CASS_OK)
{
printf("n [ %s::%d ] Error n",__FILE__,__LINE__);
}
cass_future_free(l_query_future);
假设上面的代码是在线程1中执行的,根据我当前的理解,在设置未来时将执行回调函数,并且在单独的线程中也将执行(线程2(。回调功能是这样的:
void rtInsertCallback(CassFuture* l_csp_future, void *data)
{
CassError l_returnCode = cass_future_error_code(l_csp_future);
if (l_returnCode != CASS_OK)
{
printf("n[%s::%d] %s ",__FILE__,__LINE__,cass_error_desc(l_returnCode));
}
else
{
printf("n [%s::%d] Data Inserted successfully ...",__FILE__,__LINE__);
}
}
我想知道,是否有可能在设置未来或在CassError l_returnCode = cass_future_error_code(l_csp_future);
语句在线程2中执行之前,未来将被线程1释放,因为该线程2中的上述语句将在A上进行操作。释放了未来?如果是,那么处理这种情况应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解(,请解释。谢谢!
您可以在回调语句之后自由发布"线程1"中的未来。回调将拥有自己的未来副本。
卡桑德拉回调功能也将在处理后处理资源清理。因此,我们不必明确释放未来。
可以在此处找到代码样本
https://github.com/datastax/cpp-driver/blob/master/master/examples/callbacks/callbacks/callbacks.c
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 可以使用仅功能成员属性进行回调界面
- 在Cassandra中使用回调功能
- Qthread类中的回调功能
- 如何使用C lambda将成员功能指针转换为普通功能指针,以用作回调
- 参数化回调功能
- libpcap C/C 回调功能
- C 将功能模板作为参数作为回调
- 在C 中的类中实现回调功能
- 将C 回调功能转换为Delphi
- 通过功能指针通过DLL进行回调功能,运行时检查失败#0错误
- 带有功能指针的C 回调
- pybind11基本回调,不兼容的功能签名错误
- 通过回调功能,打破一个循环的最佳方法是什么?
- Cython:具有自定义参数类型的STD ::功能回调
- 非成员功能指针作为API中的回调对成员函数
- JavaScript和C 回调功能具有参数
- c++FLTK(更多具有相同回调功能的按钮)
- 如何使一个回调全局,所以我可以使用它的其他功能