es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de tiempo de vida en Rust al usar la librería show-image.

¿Alguien puede decir cuál es el error de tiempo de vida en el siguiente código? (simplificado de mi código actual) Lo he revisado yo mismo, pero no puedo entender qué está mal o cómo solucionarlo.

“`
use crate::helloworldcapnp::helloworld;
use capnp
rpc::{rpctwopartycapnp, twoparty, RpcSystem};
use futures::AsyncReadExt;
use futures::FutureExt;
use std;

pub async fn main() -> Result<(), Box> {
tokio::task::LocalSet::new()
.rununtil(async move {
let stream = tokio::net::TcpStream::connect(“”).await?;
stream.set
nodelay(true)?;
let (reader, writer) =
tokioutil::compat::TokioAsyncReadCompatExt::compat(stream).split();
let rpc
network = Box::new(twoparty::VatNetwork::new(
reader,
writer,
rpctwopartycapnp::Side::Client,
Default::default(),
));
let mut rpcsystem = RpcSystem::new(rpcnetwork, None);
let helloworld: helloworld::Client =
rpcsystem.bootstrap(rpctwoparty_capnp::Side::Server);

        tokio::task::spawn_local(Box::pin(rpc_system.map(|_| ())));

        let mut request = hello_world.say_hello_request();
        request.get().init_request().set_name("name");

        let reply = request.send().promise.await.unwrap();
        let img = reply
            .get()
            .unwrap()
            .get_reply()
            .unwrap()
            .get_image()
            .unwrap();

        show_image::run_context(move || {
            let image = ImageView::new(ImageInfo::rgb8(800, 533), img.clone());
        });
        Ok(())
    })
    .await

}


El error del compilador es:

'reply' no vive el tiempo suficiente

el valor prestado no vive lo suficiente

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sin el contexto completo del código, es difícil determinar la causa específica del error de duración. Sin embargo, parece estar relacionado con la duración de la variable img devuelta por la promesa reply que no es lo suficientemente larga para el cierre show_image::run_context.

    Una solución es clonar la variable img antes de pasarla al cierre show_image::run_context. Otra solución es mover la llamada request.send().promise.await.unwrap() a una asignación separada let y asegurarse de que su duración sea lo suficientemente larga para el cierre show_image::run_context.

    Es importante tener en cuenta que los errores de duración pueden ser complejos y difíciles de depurar. A menudo es útil descomponer el código en partes más pequeñas y probar cada parte por separado para aislar el problema.

Comments are closed.