PDA

View Full Version : سوال: مشکلی در دریافت از کیبورد.



Mr.xenon
جمعه 16 فروردین 1392, 16:54 عصر
سلام دوستان.

فرض کنید که می خوایم یه برنامه داشته باشیم که توش در حالی که برنامه داره کار دیگه انجام می ده، کاربر چند کلید از صفحه کلید رو فشار می ده.
می خوام این کلیدارو بخونم ولی بعدا پردازششون کنم.

اشکال توابع getch , scanf... اینه که اجرای برنامه رو متوقف می کنن تا یه کلید فشار داده شه.
نمی خوام برنامه متوقف شه.

پیشاپیش تشکر

مسعود اقدسی فام
جمعه 16 فروردین 1392, 21:58 عصر
تابع kbhit وجود داره که هر وقت فراخوانی می‌شه اگه کلیدی فشار داده شده باشه (بافر صفحه کلید مقدار داشته باشه) ارزش درست رو بر می گردونه. بعدش با یه getch می تونید مقداری که وارد شده رو بخونید. مزیت kbhit همینه که منتظر نمی‌مونه. به این کد توجه کنید:




while( !kbhit() )
{
cout << "Hello" << endl;
}




این کد ساده تا زمانی که کلیدی فشار داده نشده Hello چاپ می کنه. اگه بعد از حلقه ch = getch رو بنویسید کلیدی رو که فشار داده شده رو هم به دست می‌یارید.

Mr.xenon
شنبه 17 فروردین 1392, 22:41 عصر
از پاسخی که دادید خیلی ممنونم.
راهنمایی خوبی بود.



فقط از روی کنجکاوی می خواستم بدونم ایا وقفه ای هم وجود داره که این کار رو انجام بده؟

واسه رسیدن به جواب این سوالم قبلا هم به "بافر صفحه کلید" بر خورده بودم. جایی رو سراغ دارید که در موردش بیشتر اطلاع کسب کنم؟

با تشکر فراوان.

مسعود اقدسی فام
شنبه 17 فروردین 1392, 23:56 عصر
از پاسخی که دادید خیلی ممنونم.
راهنمایی خوبی بود.



فقط از روی کنجکاوی می خواستم بدونم ایا وقفه ای هم وجود داره که این کار رو انجام بده؟

واسه رسیدن به جواب این سوالم قبلا هم به "بافر صفحه کلید" بر خورده بودم. جایی رو سراغ دارید که در موردش بیشتر اطلاع کسب کنم؟

با تشکر فراوان.

خواهش می‌کنم.

هر دستگاه ورودی و خروجی بافری داره که اطلاعات به صورت صف در اون قرار می‌گیرن. اگه شما خیلی سریع تایپ کنید همه همزمان روی صفحه نمایش داده نمی‌شن. بلکه یکی یکی از بافر خونده شده و نمایش داده می‌شن. به همین ترتیب زمانی هم که برنامه می‌نویسید اگه یه مثلا یه جا getch کنید و ab بزنید، a خونده می شه و b داخل بافر باقی می مونه تا زمانی که درخواست خوانده شدن از صفحه کلید صادر بشه. برای چاپگر و صفحه نمایش و غیره هم چنین بافرهایی وجود داره.

بله وقفه هم داره. وقفه نداشت که زبان‌ها هم کارشون لنگ می‌موند. اونا کار کردن با وقفه رو برای ما آسون می‌کنن. وگرنه سیستم فقط همین وقفه‌ها رو می‌شناسه.
مثلا این لینک:

http://spike.scu.edu.au/~barry/interrupts.html