Я разрабатываю менеджер памяти. Ядро на Си (Clang), а API обвязка уже на конечном языке. Сейчас это Delphi/FreePascal, потом будут заголовочники для попуряных C/C++ компиляторов. Есть одна важная особенность. В единицу времени я получаю вызов из произвольного потока, созданного кем-то на каком-то языке. В этот момент мне нужно прописать потоку калбек на завершение, чтобы грамотно за ним подчистить. В Windows я это делаю с помощью фиберов. Гуглил POSIX, там говорят, есть pthread_cleanup_push. Но во-первых, у нас в хедерах Delphi нет этого макроса. Во-вторых, судя по всему, он обязан работать в паре с pthread_cleanup_pop, т.е. имеет временный характер: https://godbolt.org/z/FB564h Всё, что я нашёл, это две функции: https://www.man7.org/linux/man-pages/man3/pthread_setcancelstate.3.html https://www.man7.org/linux/man-pages/man3/pthread_setcanceltype.3.html Но нигде не видно, как можно указать колбек Подскажите, пожалуйста, что делать
pthread_setcancelstate/pthread_setcanceltype - это совсем не то, что вам нужно. pthread_cleanup_push больше похоже на правду. То, что его нет в Delphi - ну лично ваши проблемы с Delphi.
Но во-первых, не у вас в Дельфи, а у вас во ФриПаскале. А во-вторых, что мешает вам в ваших Дельфях и ФриПаскалях объявить ее руками по сишному прототипу?