LINUX.ORG.RU

C<whatever> поток с задержкой, но без таймера


0

1

Борщ с капусткой, но не красный (с) :3 Извините, вырвалось.

Наткнулся тут на любопытную задачку, мой мозг уже плывет, так что могу не видеть очевидного решения. Собственно вот постановка: в процессе работы приложения возникают ситуации, когда некоторое действие должно быть выполнено через n-секундный промежуток после его инициирования, например, действием пользователя. В силу ряда причин разработчик не может использовать системный объект-таймер.

Что делать?

★★★★

Я ляпнул Thread.sleep(), но как оно работает, если не через вызов таймера?)

P.S.: прошу прощения за Java'имз. :}

Insomnium ★★★★
() автор топика

Если есть доступ к часам, то крутить цикл, пока не наступит нужное время

unC0Rr ★★★★★
()
Ответ на: комментарий от Insomnium

> но как оно работает, если не через вызов таймера?)

man nanosleep

// это syscall такой, если что.

arsi ★★★★★
()

У меня для этого реализован поток с очередью выполнения. У каждой задачи есть назначенное время. Пока в очереди есть задачи, проверяется, не наступило ли время выполнения, если да - выполняются и убираются из очереди, для остальных вычисляется время до ближайшей задачи и делается Thread.wait

note173 ★★★★★
()

g_timeout_add

Правда, оно работает в рамках GMainLoop'а, так что ищи аналог для $YOUR_TOOLKIT

yoghurt ★★★★★
()
Ответ на: комментарий от note173

И как ты проверяешь, что надо выполнить в этой очереди? Каждые n секунд пробегаешься по ней и смотришь?

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

У меня на яве, там есть object.wait(time), когда в очередь поступает новая команда, делается object.notify() и wait в соседнем потоке прерывается.

note173 ★★★★★
()
Ответ на: комментарий от Insomnium

А почему бы и нет? (в отдельном потоке, с посылкой вызвавшему потоку сигнала)

Eddy_Em ☆☆☆☆☆
()

> в процессе работы приложения возникают ситуации, когда некоторое действие должно быть выполнено через n-секундный промежуток после его инициирования

Это что за такая ситуация? Интересно...

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

>Это что за такая ситуация? Интересно...

Например, аппаратуру щупает на последовательном порте...

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