Привет,
есть функция, в которую я хочу добавить возможность выполнения в «пошаговом» режиме. Выглядить это должно так. Я вызываю функцию, она что-то делает, потом возвращается. Когда я вызываю эту же функцию снова, то управление возвращается в то место, где оно прервалось. Функция опять что-то сделает и снова возвращается и т.д.
Для этого я думал использовать функции getcontext/setcontext. Вот код, который я хотел использовать:
void field_connect (field_t self)
{
if (self->cont)
{
self->cont = 0;
setcontext (&self->context);
}
self->cont = 0;
int i;
for (i = 0; i < self->paths->len; i++)
{
path_t cur_path;
cur_path = g_array_index (self->paths, typeof (cur_path), i);
struct point a;
path_get_point (cur_path, 0, &a);
int j;
for (j = 1; j < cur_path->len; j++)
{
struct point b;
path_get_point (cur_path, j, &b);
self->fops.init_search (self, &a, &b, 0);
int res;
struct cell intersection;
do
{
res = self->fops.wave_step (self, &intersection);
if (self->step_by_step)
{
self->cont = 1;
getcontext (&self->context);
printf ("getcontext\n");
if (self->cont)
return;
}
}
while (res == 0);
b = a;
}
}
self->cont = 0;
}
Тут переменная cont говорит, нужно ли продолжать выполнение функции с какого-то места, step_by_step говорит о том, что функция должна работать в пошаговом режиме.
Проблема в том, что при смене контекста локальные переменные не сохраняются. Может тут нужно использовать функцию makecontext для того, чтобы как-то сохранить стек? Но курение манов не помогло мне с ней разобраться, поэтому и прошу помощи.