Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Язык Rust: почему внешняя с++-функция выполняется в другом потоке?

#rust


Впечатление, что если в Rust подключить внешнюю функцию С++, то она выполняется в
другом потоке, отличном от того, в котором находится вызывающий код.

Почему так происходит? Разве так задумано? Это описано где-нибудь?

Вот тестовая программа на Rust:

extern crate libc;
use libc::{c_int};

#[link(name = "Project1", kind="static")]
extern {
    pub fn lib_fun(i: c_int) -> c_int;
}


fn main() {
    unsafe { lib_fun(2); }
    println!("from Rust: {}", 2);
}


Вняшняя функция lib_fun на С++ выглядит так:

#include 

extern "C" {
    int lib_fun(int t) {
        printf("from C++: %d\n", t);
        return t;
    }
}


Ожидаю, что программа должна вывести:

from C++: 2
from Rust: 2


Однако при запуске она выводит в обратной последовательности:

from Rust: 2
from C++: 2


Получается, внешняя функция lib_fun выполняется в другом потоке. Или я не прав?

Система Windows 7x64
    


Ответы

Ответ 1



Она пишет в стандартный вывод через свой буфер. Вставка в С++-функции fflush(stdout); после printf решило проблему.

Комментариев нет:

Отправить комментарий