Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Вопрос про ftw() и nftw()


Автор: andrew_121 20.12.2009, 06:22
Привет.
Вот описание http://www.opennet.ru/man.shtml?topic=ftw&category=3&russian=2
Все хорошо и понятно. Но есть одно НО! кэлбэк получает имя и struct stat, но невозможно передать в него указатель на структуру/объект в которую нужно сохранять полученные аргументы. Без этой возможности, что-то смысла в ftw() не вижу, кроме как только выполнять некие операции над полученными значениями. А хотелось бы чтоб кэлбэк получал указатель на void*, чтоб привести его к нужному типу, и вызвать методы. Или я не туда смотрю, или...

Автор: MAKCim 20.12.2009, 10:46
передавай void* через глобальную переменную
если программа многопоточная, используй per-thread переменные

Автор: andrew_121 20.12.2009, 13:15
Значит я все же "туда" смотрел.

Цитата(MAKCim @  20.12.2009,  10:46 Найти цитируемый пост)
используй per-thread переменные

Ну в с++ я бы использовал Per_Thread_Singleton, но как подобное реализовать в Си, не догоняю. Не подскажешь?

Автор: MAKCim 20.12.2009, 14:45
Код

#define DEFINE_PER_THREAD(name, type) \
    static inline type *PER_THREAD_##name() \
    { \
        static __thread type __val_##name; \
        return &__val_##name; \
    }

#define PER_THREAD(name) \
    PER_THREAD_##name()

DEFINE_PER_THREAD(var1, int)
...
int var1 = *PER_THREAD(var1);

Автор: andrew_121 20.12.2009, 15:23
ааа...макросами! Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)