如何为域生命周期设置事件回调

how to set an event callback for a domain lifecycle

我正在关注 this 文档并且我正在使用 qt 来实现此事件

#include <QCoreApplication>
#include <QDebug>
#include <libvirt/libvirt.h>

void
domainLifecycleCb(virConnectPtr conn,
                  virDomainPtr dom,
                  void * opaque)
{
    qDebug() << "test";
}

int main(int argc, char *argv[])
{
    virEventRegisterDefaultImpl();
    QCoreApplication a(argc, argv);
    virConnectPtr conn = virConnectOpen("qemu:///session");
    virDomainPtr domain = virDomainLookupByName(conn, "Windows");

    qDebug() << virConnectDomainEventRegisterAny(conn,
                                                 domain,
                                                 VIR_DOMAIN_EVENT_ID_LIFECYCLE,
                                                 VIR_DOMAIN_EVENT_CALLBACK(domainLifecycleCb),
                                                 NULL, NULL);
    return a.exec();
}

我尝试了不同的方法,但是当域关闭或启动时事件不起作用。

我的意思是当域生命周期发生变化时回调函数应该被调用,我通过在回调函数中显示输出来确定这一点。

有一个函数需要循环调用才能保持连接

#include <QCoreApplication>
#include <QDebug>
#include <libvirt/libvirt.h>
#include <QThread>

void domainLifecycleCb(virConnectPtr conn,
                  virDomainPtr dom,
                  void * opaque)
{
    qDebug() << "test";
}

int main(int argc, char *argv[])
{
    virEventRegisterDefaultImpl();
    QCoreApplication a(argc, argv);
    virConnectPtr conn = virConnectOpen("qemu:///session");
    virDomainPtr domain = virDomainLookupByName(conn, "WindowsECO");

    QThread *thread = QThread::create([]{
        while (true) {
            qDebug() << virEventRunDefaultImpl();
        } });
    thread->start();

    qDebug() << virConnectDomainEventRegisterAny(conn,
                                                 domain,
                                                 VIR_DOMAIN_EVENT_ID_LIFECYCLE,
                                                 VIR_DOMAIN_EVENT_CALLBACK(domainLifecycleCb),
                                                 NULL, NULL);
    return a.exec();
}