在 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__);
}
}
我想知道,在设置未来之前或在线程 2 中执行 CassError l_returnCode = cass_future_error_code(l_csp_future);
语句之前,未来是否有可能被线程 1 释放,因此线程中的上述语句2 将在自由的未来运作?如果是,那么处理这种情况的正确方法应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解),请解释。谢谢!
您可以在 "Thread 1" 回调语句后自由释放未来。回调将有自己的未来副本来处理。
Cassandra 回调函数还将在处理后负责资源清理。所以我们不必明确地释放未来。
可以在此处找到代码示例
https://github.com/datastax/cpp-driver/blob/master/examples/callbacks/callbacks.c
我想获得有关在 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__);
}
}
我想知道,在设置未来之前或在线程 2 中执行 CassError l_returnCode = cass_future_error_code(l_csp_future);
语句之前,未来是否有可能被线程 1 释放,因此线程中的上述语句2 将在自由的未来运作?如果是,那么处理这种情况的正确方法应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解),请解释。谢谢!
您可以在 "Thread 1" 回调语句后自由释放未来。回调将有自己的未来副本来处理。
Cassandra 回调函数还将在处理后负责资源清理。所以我们不必明确地释放未来。
可以在此处找到代码示例
https://github.com/datastax/cpp-driver/blob/master/examples/callbacks/callbacks.c