Do i realy have to add a while loop just to check once for if(my.flagX)
The while loop is one possibility.
or is it possible to have something like an event-function that is only triggered when a flag gets set to 1?
Not natively. But you can easily call that function every time after manipulating the skill:
my_special_ent->skill1 += 1;
skill_was_changed(my_special_ent);
If you're doing this frequently you can also write a setter function:
void set_skill1(ENTITY* ent,fixed value)
{
if (!ent)
return;
ent->skill1 = value;
skill_was_changed(ent);
}