Я пишу библиотеку C с открытым исходным кодом. Эта библиотека довольно сложна, и некоторые операции могут занять много времени. Поэтому я создал фоновый поток, который управляет долгосрочными задачами.
Моя проблема в том, что я еще не нашел элегантный способ вернуть ошибки из фонового потока. Предположим, что фоновый поток реорганизует файл или выполняет периодическое обслуживание, и он терпит неудачу - что делать?
В настоящее время я вижу два варианта:
1) если пользователь заинтересован в том, чтобы увидеть эти ошибки, он может зарегистрировать функцию обратного вызова.
Мне не нравится эта опция - пользователь даже не знает, что существует фоновый поток, поэтому он, скорее всего, забудет о настройке функции обратного вызова. С точки зрения удобства использования эта опция плохая.
2) фоновый поток сохраняет ошибку в глобальной переменной, и следующая функция API возвращает эту ошибку.
Это то, что я сейчас делаю, но я также не на 100% доволен этим, потому что это означает, что пользователи должны ожидать КАЖДЫЙ возможный код ошибки, возвращаемый из каждой функции API. То есть если фоновый поток устанавливает ошибку ввода-вывода, а пользователь просто хочет узнать версию библиотеки, он получит ошибку ввода-вывода, хотя API-вызов get_version () вообще не обращается к диску. Опять же, плохое удобство использования ...
Любые другие предложения / идеи?