Я работаю над созданием библиотеки потоков пользовательского уровня, и я хочу запустить функцию внутри заглушки, поэтому я бы хотел передать указатель на функцию заглушки.
Вот моя функция заглушки:
void _ut_function_stub(void (*f)(void), int id)
{
(*f)();
DeleteThread(id);
}
Это то, что пользователь называет. Я хочу получить указатель _ut_function_stub для назначения ПК и я пробовал различные варианты, включая приведение, но компилятор продолжает говорить «недопустимое использование пустого выражения».
int CreateThread (void (*f) (void), int weight)
{
... more code
pc = (address_t)(_ut_function_stub(f, tcb->id));
... more code
}
Любая помощь приветствуется. Спасибо!
Если вы заинтересованы в реализации своей собственной библиотеки потоков уровня пользователя, я бы посоветовал изучить (сейчас не рекомендуется) ucontext
реализация. В частности, глядя на определения для структур, используемых в ucontext.h
поможет вам увидеть все, что вам действительно нужно захватить, чтобы получить действительный снимок состояния потока.
То, что вы действительно пытаетесь захватить с ошибкой (address_t)
приведение в вашем примере является текущим продолжение. К сожалению, C не поддерживает первоклассные продолжения, поэтому вы будете застревать, делая что-то гораздо более низкое, например, обмен стеков и сброс регистров (поэтому я и указал вам на ucontext
в качестве ссылки — это будет довольно сложно, если вы действительно хотите сделать это правильно).
Других решений пока нет …