Впечатление, что если в 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
", t);
return t;
}
}
Ожидаю, что программа должна вывести:
from C++: 2
from Rust: 2
Однако при запуске она выводит в обратной последовательности:
from Rust: 2
from C++: 2
Получается, внешняя функция lib_fun выполняется в другом потоке. Или я не прав?
Система Windows 7x64
Ответ
Она пишет в стандартный вывод через свой буфер. Вставка в С++-функции fflush(stdout); после printf решило проблему.
Комментариев нет:
Отправить комментарий