|
دوستان من می خوام برنامه ای داشته باشم که ساعت و تاریخ قرار ملاقات های کاربر رو در بانکی ذخیره کند و در تاریخ و ساعت مشخص شده به کاربر آلارم بدهد. مسلماً نمی شه هر چند دقیقه ساعت و تاریخ های ذخیره شده را با زمان فعلی مقایسه کرد. برای این کار چه راه حلی پیشنهاد می دین؟ راستی زبان مورد استفاده من #C است.
اول اینکه چرا نشه بانک اطلاعاتی رو چک؟ حتی اگه 100هزارتا رکورد هم داشته باشید، اگه کوئری درستی گرفته بشه تقریبا زمان انجام کار صفر خواهد بود. شما میتونید هر یک دقیقه از بانک اطلاعاتی کوئری بگیرید و تنها مواردی رو انتخاب کنید که الان زمان اعلان آنهاست.
به عنوان مثال میتوان دستوری نوشت که تاریخ هر آلارم را با استفاده از تابع GETDATE() چک کند و تنها رکوردهایی را استخراج کند که زمان هشدار آنها رسیده
روش دوم اینه که هنگامی که کاربر یک آلارم رو به نرم افزار شما اضافه کرد، شما اون رو به سیستم زمانبدی ویندوز بدید تا ویندوز مسئولیت انجام زمانبندی رو به عهده بگیره. روش کار با Windows Task رو میتونید تو این مقاله پیدا ببینید:
amir@ جان ممنون. پاسخ تون خوبه، اما به نظر من، شاید روش اصولی تر انجام این کار، همون استفاده از ScheduledTask ها باشه. اما کاش یه توضیح خلاصه ای از اون مقاله رو این جا می ذاشتین تا یه کسی مثل من که زیاد انگلیسی حالیش نمی شه هم بتونه از مطلب استفاده کنه. ولی در کل خیلی ازت ممنونم که روش جالبی رو به من یاد دادی.
|
|
مثلا میشه یک نخ (thread) اصلی داشته باشی که با یک دوره زمان ثابت مثلا هر 15 دقیقه تمام لیست رو چک کنه و اگه در کمتر از 15 دقیقه یادآوری داشته باشی برای اون یک نخ تعریف کنه که سر ساعت مقرر اجرا بشه همین جوری به ذهنم رسید می تونیم با گفتگو به راههای بهتری برسیم.
mohammadi۴net@ جان درست می فرمایید. ولی این روش درست انجام کار نیست و همانطور که raccoon@ هم گفته این کار منابع زیادی رو در سیستم به هدر می ده! راه های بهتری هم مثل راهی که amir@ برای بکار گیری ScheduledTask های ویندوز بکارگرفته، وجود داره که از منابع بسیار کمتری استفاده می کنند.
من تو یه نرم افزار که تحت شبکه کار می کنه یه یادآور براساس تاریخ دارم کاربران نرم افزار ازم خواسته بودن که قابلیت یادآوری ساعتی و دقیقه ای بهش اضافه کنم.اگه بخواهم هر دقیقه به ازای هر کاربر یه کوئری رو سرور اجرا کنم زیاد جالب نمیشه به همین دلیل این روش پیشنهاد دادم. که برگرفته از مفروضات ذهنی خودم بود. الف : نرم افزار دسکتاپ تک کاربره ب : قسمتی از یک نرم افزار کاربردی تحت شبکه
به احتمال زیاد دوستمون حالت الف مد نظرشون هست که جناب amir@ پاسخ منطقی دادند.
حالا اگه بخواهیم از روش دوم استفاده کنیم پیشنهادتون چیه؟
دوست من mohammadi۴net@ فرمایشتون به نظر من درسته. در مورد قسمت (ب) که شما فرمودین، به نظر من هر دو راه حل کاربردی است. (البته مسلم است که باید این اتفاق روی سرور بیفتد) یعنی هم می شود روی سرور برنامه ای داشت به ازای یک بازه زمانی نسبتاً بلند مثل همان 15 دقیقه زمان ها را بررسی نماید و هم می شود از راه حل amir@ استفاده کرد (یعنی همان تنظیم ScheduledTask ها روی سرور). هر دو راه حل کاربردی و قابل تأمل است.