Как использовать простаивающий поток?

У меня есть некая база данных, которую раз в час мне нужно проверять. Я думал выделить отдельный поток, который будет раз в 3600 секунд делать проверку, но потом до меня дошло, что я собираюсь выделить целый поток, который 99.9% своего времени будет простаивать в ожидании (sleep). Есть ли какой-нибудь более рациональный сделать такой механизм проверки, без необходимости выделять целый поток на это? И есть ли способ, пока поток простаивает перенаправить его ресурсы на более важные задачи? Вот пример кода:

class Program
{
        static void CheckDataBase()
        {
            //... some code
        }

        static void Main(string[] args)
        {
            Thread DataCheck = new Thread(CheckDataBase);
            DataCheck.Start();
            //... some code
        }
}

И ещё у меня небольшой вопрос. Как программа на wpf или формах понимает когда была нажата кнопка? Там же не используется какой то механизм, который каждую миллисекунду проверяет не нажата ли кнопка? И как я знаю там вызывается делегат метода, который реализует логику кнопки прямо в момент нажатия, без посредников в виде бесконечных циклов, или я не прав? И если это так, то как это сделано?


Ответы (1 шт):

Автор решения: pepsicoca1

Когда поток висит на sleep-е, то он не использует ресурсы процессора. Ну, почти не использует, так как строчку во внутренних таблицах ОС поток все-таки занимает и ОС периодически проверяет эти таблицы и анализирует, не пора ли запустить поток. А вот память даже остановленный поток занимает. Но на это приходится идти, так как по-другому не сделаешь.

→ Ссылка