LINUX.ORG.RU

Как в XWindows показать окно на N секунд?


0

0

Мне нужно, чтобы мое окно всплывало, держалось показанным N секунд, а
затем само закрывалось. Я сделал для этого тред, делающий
XDestroyWindow(display, window) через заданное время, но после этог
вызова окно не закрывается, пока не произойдет еще какое-то событие
типа перерисовки. То есть, заданное время проходит, XDestroyWindow
в треде вызывается, но ничего не происходит, пока я не подвигаю.
Как только начинаю двигать - оно закрывается.

Маска событий у меня такая: 

  XSelectInput (mydisplay,
                mywindow,
                ExposureMask | StructureNotifyMask);

Я подозреваю, что нужно кроме XDestroyWindow как-то послать какое-нибудь
сообщение этому окну, но вот как? Или как еще можно решить эту задачу?

Подскажите, плз... 

anonymous

Ответ на: комментарий от anonymous

#define N 10

void wait_N_seconds(Display *dpy)
  {
  struct timeval tv;
  fd_set fs;
  time_t t;

  time_t start = time(NULL);
  int fd = ConnectionNumber(dpy);

  do
    {
    XFlush(dpy);

    t = time(NULL) - start;
    if (t >= N)  break;

    if (!XEventsQueued(dpy, QueuedAlready))
      {
      tv.tv_sec = N - t;
      tv.tv_usec = 0;

      FD_ZERO(&fs);
      FD_SET(fd, &fs);

      if (select(fd + 1, &fs, NULL, NULL, &tv) <= 0)  break;
      }

    //process_next_event();
    } while (1);
  }


ЗЫ: половина программ, использующих треды, будет проще, легче и
предсказуемее, если не будет использовать треды (IMHO).

nobody ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.