찾다

 >  Q&A  >  본문

c++ - 多线程异步回调的疑问?

假设有这样一个需求:
我想把主线程中的数据存入数据库,但是不能造成主线程阻塞,所以我打算使用异步回调的方法,设置另一个线程中回调函数,并由它来执行写数据库操作。

这里有几个问题我不是很明白:

1.写数据库完成后,要怎样通知主线程?毕竟主线程不能采用wait()来等待...那么主线程要使用什么机制来得到“写数据库”这个操作执行完毕的信息?
2.到底啥是异步回调,一定要是多线程来实现吗?

最好能写个简单的demo或者伪代码来解释,非常感谢~

PHP中文网PHP中文网2803일 전1172

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 13:49:29

    1. 调用写数据库的方法的时候,传入回调函数

    2. 写数据库的方法被调用的时候会启动另一个线程做真正的数据库写入操作,线程启动后该方法立即返回。

    3. 当做数据库写入操作的线程执行完毕后,调用在第一步传入的回调函数。

    // 定义Callback回调函数接口
    function Callback(...);
    
    function writedb(string sql, Callback callback) {
        // 创建新的线程来进行DB操作
        Thread t = new Thread() {
            // 更新DB
            ...
            // 调用回调函数
            callback(...);
        }
        t.start();
        return;
    }
    
    function main() {
        ...
        writedb(sql, new Callback(...) {
            // 回调函数代码
            ...
        });
        // 其他代码,将与db操作同时进行
        ...
    }

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:49:29

    1、我觉得你这个需求用生产者消费者模型去解决思路会比较清晰。

    2、异步回调不一定要用到多线程,浏览器上的JavaScript就是个完美的单进程单线程实现异步回调的例子。

    회신하다
    0
  • 취소회신하다