|
1
1
您应该能够在不接触C++的情况下编写包装器。看看如何在dart:async中使用Completer类。基本上,您需要创建一个Completer,立即返回Completer.future,然后从现有回调中调用Completer.complete(行)。 回复:更新。你见过这个吗 article ,特别是关于异步扩展的一点?例如,如果C++API是同步的,您可以在单独的线程中运行它,并使用消息传递与它进行通信。这可能是一种实现方法。 |
![]() |
2
1
您遇到的最大问题是SQLite是一个嵌入式数据库;为了处理查询并提供结果 必须 在您的过程中执行计算(和I/O)。此外,为了使其事务处理系统正常工作,它要么需要连接在 thread that created it ,或以串行模式运行(性能命中)。
因为这些都是相当严格的限制,所以除非使用多个线程,否则切换到异步操作模式的计划不太可能顺利。因为使用多个连接会使事情复杂化很多(因为你不能在它们之间共享一些东西,例如
通过管理工作线程和线程间通信,将同步异步耦合放在Dart级别,这样做可能更简单。这将使您避免对C++代码进行重大更改。我不太了解达特,无法在那里提供很多建议。 我自己,我只是坚持同步连接处理,这样我可以让我的应用程序更有效地使用多线程模式。我将在语义方面取得成功,并为每个线程提供自己的连接(可能是延迟分配的),这样总体速度会更好,但我确实来自一个将线程视为相对重量级资源的编程社区,所以请尽可能利用这一点。(重线程可以减少所需锁的数量,但尝试使用轻线程是没有意义的;这与开销管理有关。) |
![]() |
sofalse · Javascript-继续foreach 7 年前 |
![]() |
Bacroom App · 同步执行nodejs 7 年前 |
|
Peter Kroul · 在后台从PHP循环调用PHP文件 7 年前 |
![]() |
Luis Melendez · 在同步ajax上显示等待对话框 7 年前 |
![]() |
João Gouveia · 在Node JS中同步执行循环 7 年前 |
![]() |
JohnnyCage · 使用Singleton处理订单? 9 年前 |