mco_register_alloc_callback
接口适用于实时数据库 RT 。
注册一个回调函数,当运行时检测到内存不足时调用该函数。
该回调函数将根据参数 threshold_kind 和 threshold_value 中指定的阈值条件进行调用。如果需要将任何特定于应用程序的数据传递到回调函数中,则通过使用 mco_db_connect_ctx() 创建的连接上下文来完成。
回调注册是按连接进行的,当从注册了回调的连接分配内存时,会调用回调函数。重要提示:应用程序不得从回调函数自身释放数据库内存。相反,建议要么通知不同的垃圾回收线程,要么由回调函数设置一个“全局”标志,并定期从主应用程序线程检查该标志。
void mco_register_alloc_callback(
/*IN*/ mco_db_h db,
/*IN*/ mco_alloc_callback_t callback,
/*IN*/ mco_alloc_callback_threshold_kind_t threshold_kind,
/*IN*/ mco_offs_t threshold_value
);参数
db
mco_db_h
由 mco_db_connect() 建立的数据库句柄。
callback
mco_alloc_callback_t
运行时调用的分配处理程序回调函数,用于确定内存分配状态。
threshold_kind
mco_alloc_callback_threshold_kind_t
分配阈值类型,用于指示要应用的阈值类型。
threshold_value
mco_offs_t
设置阈值的值。
返回
没有返回值。
示例
/* 应用程序代码片段 */
const char * dbname = "SimpleDb";
int main(int argc, char* argv[])
{
mco_db_h db;
MCO_RET rc;
char *mem = malloc( DBSIZE );
if( (rc = mco_runtime_start()) != MCO_S_OK)
exit(-1);
rc = mco_db_open( dbname, simple_get_dictionary(), mem, DBSIZE, (uint2)PAGESIZE );
if( (MCO_S_OK == rc)
{
rc = mco_db_connect( dbname, &db );
...
/* start a thread to manage the garbage collection procedure */
sample_start_connected_task( &task, gc_task, dbname, 0 );
/* register alloc callback */
mco_register_alloc_callback( db, alloc_callback,
MCO_ALLOC_USED, DATABASE_SIZE / 2 );
/* connect to database */
rc = mco_db_connect(dbName, &db);
...
}
...
}文件
- 头文件:
mco.h - 源文件:
mcoconn.c - 库:
libmcolib.a
