Страницы

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

понедельник, 18 марта 2019 г.

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


Ответ

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

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

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