1

我正在创建使用 sqlite 来存储一些键值对的应用程序。现在我不想阻止主线程来执行 sqlite 操作。我为 sqlite 操作创建了单独的线程并为所有操作创建了一个队列。主线程告诉 sqlite 线程进行各种操作。对于每个 sqlite 操作,sqlite 线程创建一个任务并将其添加到其队列中。sqlite 线程的主循环从队列中获取任务并处理它。

现在的问题是主线程在从 sqlite 获取数据之前无法继续。那么为 sqlite 操作设置单独的线程是否有意义?

我可以这样做是更好的方法,以便我的主线程保持畅通并且它也可以获得 sqlite 数据吗?

4

1 回答 1

0

是的你可以。例如,您可以有一些函数 getResult() 将返回您将在主线程中使用的并发容器。它允许添加新数据,只要它是从数据库中提取的,另一方面是在数据可用时立即获取数据,而不是等到整个结果准备好。对于并发容器,您可以尝试以下库:PPLTBBBoost.Lockfree

您还可以通过将事件从工作线程发送到主线程来使用一些事件驱动的编程。在这种情况下,Boost.Signals 可能会有所帮助。

还有一件事:例如,您可以通过使用 PPL::task 来使用异步编程。您创建任务以从数据库中获取结果并设置继续来处理此结果。没有块。

我相信还有其他变体。因此,您可以选择更适合该任务的内容

于 2013-10-30T06:44:20.703 回答