LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Заведи функцию со статик переменной. Ну типа вот образно.

enum sg
{
   SET,
   GET,
}
int mylib_setget_signal(enum sg,int signal, void * sender, void * current)
{
  

  static int local = NO_SIGNAL;
  switch(sg)
  {
    case SET: local = signal; return local;
    case GET: if(sender == current){ return NO_SIGNAL;} return local;
  }
  return ERROR;
}

Пусть в главном потоке получаются и обрабатываются сигналы и делают SET. Пусть все остальные потоки при работе постоянно делают GET проверяя текущий статус «сигнала». На всякий случай «броадкаста» при установке значения сигнала ещё указывается указатель на что-то специфичное потоку и если отправитель == приёмник то игнорируем, что-бы не слать «сигналы» самому себе.

Исходная версия LINUX-ORG-RU, :

Заведи функцию со статик переменной. Ну типа вот образно.

enum sg
{
   SET,
   GET,
}
int mylib_setget_signal(enum sg,int signal, void * sender, void * current)
{
  if(sender == current) return NO_SIGNAL;

  static int local = NO_SIGNAL;
  switch(sg)
  {
    case SET: local = signal; return local;
    case GET: return local;
  }
  return ERROR;
}

Пусть в главном потоке получаются и обрабатываются сигналы и делают SET. Пусть все остальные потоки при работе постоянно делают GET проверяя текущий статус «сигнала». На всякий случай «броадкаста» при установке значения сигнала ещё указывается указатель на что-то специфичное потоку и если отправитель == приёмник то игнорируем, что-бы не слать «сигналы» самому себе.