簡體   English   中英

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行,然后調用回調,然后執行下一行代碼。

  • Asynchonous:執行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");
}

將在TableNames表中找到的每個條目上調用_getName 如果未找到任何條目,則不會調用該函數,也不會出現錯誤。 如果你有一個名為TableNames的表有10個條目,那么names.size() == 10 如果返回非零,則不再調用_getName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM