Функция бега внутри заглушки. Указатель на прохождение функции

Я работаю над созданием библиотеки потоков пользовательского уровня, и я хочу запустить функцию внутри заглушки, поэтому я бы хотел передать указатель на функцию заглушки.

Вот моя функция заглушки:

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
}

Любая помощь приветствуется. Спасибо!

1

Решение

Если вы заинтересованы в реализации своей собственной библиотеки потоков уровня пользователя, я бы посоветовал изучить (сейчас не рекомендуется) ucontext реализация. В частности, глядя на определения для структур, используемых в ucontext.h поможет вам увидеть все, что вам действительно нужно захватить, чтобы получить действительный снимок состояния потока.

То, что вы действительно пытаетесь захватить с ошибкой (address_t) приведение в вашем примере является текущим продолжение. К сожалению, C не поддерживает первоклассные продолжения, поэтому вы будете застревать, делая что-то гораздо более низкое, например, обмен стеков и сброс регистров (поэтому я и указал вам на ucontext в качестве ссылки — это будет довольно сложно, если вы действительно хотите сделать это правильно).

1

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

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

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