Поток убит, когда приложение фоновое?

Я разрабатываю файловую систему fuse и перед вызовом fuse_main_real() Я начинаю std::thread в экземпляре класса, чтобы сделать некоторую фоновую работу.

this->t_receive = new std::thread([this] { this->receive(); });

Тем не менее, похоже, fuse_main_real() убивает эту тему при переходе в фоновый режим.
Если я начну программу с -f Опция, которая указывает fuse оставаться на переднем плане, проблема не возникает и поток выживает.

Я не уверен, что предохранитель делает в фоновом режиме.

Как мне сделать так, чтобы моя нить выживала в фоновом режиме?


Изменить: Вот базовый пример, который раскрывает проблему:

#define FUSE_USE_VERSION 30

#include <iostream>
#include <thread>

#include <fuse.h>

static void thread_method()
{
while (true)
{
std::cout << "test" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}

struct testop : fuse_operations
{ };

static struct testop ops;

int main(int argc, char** argv)
{
std::thread(thread_method).detach();
fuse_main_real(argc, argv, &ops, sizeof(fuse_operations), NULL);
}

Компилировать с

g++ -D_FILE_OFFSET_BITS=64 `pkg-config --cflags fuse` -lfuse -lpthread -std=c++14 -o test.o test.cpp

Команда, которая работает (неоднократно говорит «тест»):

./test.o -f /home/test/testmountpoint

Команда, которая не работает и показывает проблему (однажды говорит «test»):

./test.o /home/test/testmountpoint

3

Решение

libfuse wiki Говорит, что

Разные потоки следует запускать из метода init (). Потоки, запущенные до того, как fuse_main () завершится, когда процесс перейдет в фоновый режим.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]