sqlite3_exec回调是同步的还是异步的?
Is sqlite3_exec callback synchronous or asynchronous?
带有回调参数的 Sqlite3 函数 sqlite3_exec()
是同步运行还是异步运行?
调用示例:
int retStatus = sqlite3_exec(pDB, "SELECT * FROM SomeTable WHERE Something='Hi'", callback, &object, &error);
...Next line(s) of code...
同步:sqlite3_exec行被执行,然后回调被调用,
然后执行下一行代码。
异步:sqlite3_exec行被执行,下一行代码
执行并在某个时候调用回调。
同步。在代码继续之前为找到的每一行调用回调:
static int _getName(void* pNames, int columns, char** data, char** columnNames)
{
if (columns < 2)
{
assert(false && "Function called on wrong table!");
// Signify failure
return 1;
}
std::vector<std::string>* vNames = static_cast< std::vector<std::string>* >(pNames);
vNames->push_back(data[1]);
// Success:
return 0;
}
{
std::vector<std::string> names;
// assume pDB is a valid, opened sqlite3* db
char* error = 0;
if (sqlite3_exec(pDB, "SELECT * FROM TableNames", _getName, static_cast<void*>(&names), &error) != SQLITE_OK)
{
// log and free error:
}
assert(names.size() && "No entries were found in the table");
}
_getName
将在 table TableNames
中找到的每个条目上调用。如果未找到任何条目,则不会调用该函数,也不会出现错误。如果您 table 调用了具有 10 个条目的 TableNames,则 names.size() == 10
。 _getName
如果 returns 非零
将不再被调用
带有回调参数的 Sqlite3 函数 sqlite3_exec()
是同步运行还是异步运行?
调用示例:
int retStatus = sqlite3_exec(pDB, "SELECT * FROM SomeTable WHERE Something='Hi'", callback, &object, &error);
...Next line(s) of code...
同步:sqlite3_exec行被执行,然后回调被调用, 然后执行下一行代码。
异步:sqlite3_exec行被执行,下一行代码 执行并在某个时候调用回调。
同步。在代码继续之前为找到的每一行调用回调:
static int _getName(void* pNames, int columns, char** data, char** columnNames)
{
if (columns < 2)
{
assert(false && "Function called on wrong table!");
// Signify failure
return 1;
}
std::vector<std::string>* vNames = static_cast< std::vector<std::string>* >(pNames);
vNames->push_back(data[1]);
// Success:
return 0;
}
{
std::vector<std::string> names;
// assume pDB is a valid, opened sqlite3* db
char* error = 0;
if (sqlite3_exec(pDB, "SELECT * FROM TableNames", _getName, static_cast<void*>(&names), &error) != SQLITE_OK)
{
// log and free error:
}
assert(names.size() && "No entries were found in the table");
}
_getName
将在 table TableNames
中找到的每个条目上调用。如果未找到任何条目,则不会调用该函数,也不会出现错误。如果您 table 调用了具有 10 个条目的 TableNames,则 names.size() == 10
。 _getName
如果 returns 非零