在Cassandra中使用回调函数

问题描述 投票:0回答:1

我想获得有关在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中的上述语句将在释放的未来运行吗?如果是,那么处理这种情况的正确方法应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解),请解释。谢谢!

c++ multithreading cassandra cassandra-3.0
1个回答
3
投票

您可以在回调语句之后在“线程1”中释放未来。回调将有自己的未来副本来处理。

Cassandra回调函数在处理完成后也会处理资源清理。所以我们不必明确地释放未来。

代码示例可以在这里找到

https://github.com/datastax/cpp-driver/blob/master/examples/callbacks/callbacks.c

© www.soinside.com 2019 - 2024. All rights reserved.