PDA

View Full Version : سوال: چگونه کاراکتری را از کاربر دریافت کنم بدون توقف برنامه



sina.es
جمعه 28 اسفند 1394, 07:31 صبح
چگونه از کاربر متغییری را بدون ایستادن برنامه دریافت کنم؟ یعنی برنامه به کار خودش ادامه بدهد و هنگامی که کلیدی زده شد فلان کار را انجام دهد.
مثلا یک کرنومتر کار کند و هر وقت گزینه x زده شد استاپ کند.

ASM6502
جمعه 28 اسفند 1394, 14:48 عصر
به نظر من از یه حلقه while استفاده بکن
بررسی فشار داده شدن دکمه رو هم بزار داخل شرط حلقه

negative60
جمعه 28 اسفند 1394, 16:11 عصر
چگونه از کاربر متغییری را بدون ایستادن برنامه دریافت کنم؟ یعنی برنامه به کار خودش ادامه بدهد و هنگامی که کلیدی زده شد فلان کار را انجام دهد.
مثلا یک کرنومتر کار کند و هر وقت گزینه x زده شد استاپ کند.

از thread (http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm) استفاده کن

sina.es
جمعه 28 اسفند 1394, 16:19 عصر
به نظر من از یه حلقه while استفاده بکن
بررسی فشار داده شدن دکمه رو هم بزار داخل شرط حلقه
در این صورت برای گرفتن متغییر برنامه توقف میکنه و این راه حل مشکل من نیست:افسرده::افسرده::افسرده: :افسرده:

sina.es
جمعه 28 اسفند 1394, 16:20 عصر
از thread (http://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm) استفاده کن
میشه یکم بیشتر توضیح بدید چون انگلیسیم حرفه ای نیست:متفکر::متفکر:

darknes666
جمعه 28 اسفند 1394, 18:06 عصر
میشه یکم بیشتر توضیح بدید چون انگلیسیم حرفه ای نیست:متفکر::متفکر:
multitasking گونه ای خاص از برنامه نویسیه که باعث میشه برنامه در آن واحد چند وظیفه رو به طور همزمان انجام بده.به طور کلی دو نوع برنامه چند وظیفه ای یا multitasking داریم یکی بر پایه ی thread و اون یکی بر اساس process.
یک برنامه ی Multitasking بر پایه ی process که همزمان چند برنامه ی مجزا رو اجرا میکنه.
دو برنامه ی multitasking بر پایه ی thread که بخش های مجزای یک برنامه رو به طور همزمان اجرا میکنه.
یک برنامه ی multithread شامل چند بخش هست که میتونن به طور مجزا اجرا بشن.هر بخش برنامه رو یک thread مینامیم.هر thread نحوه ی اجرای هر بخش رو به طو جداگونه تعریف میکنه.
اینکه بتونی یه برنامه ی Multithread با c++ بنویسی به خود زبان بستگی نداره.بلکه c++ برای انجام این کار به سیستم عامل تکیه میکنه.
حالا بسته به این که میخوای این کارو رو چه سیستم عاملی انجام بدی دنبال آموزش بگرد.

جدا از این بحث برای این کار تو ویندوز api مناسب داریم.

ASM6502
شنبه 29 اسفند 1394, 07:10 صبح
در این صورت برای گرفتن متغییر برنامه توقف میکنه و این راه حل مشکل من نیست:افسرده::افسرده::افسرده: :افسرده:


# include <iostream>
# include <conio.h>
using namespace std;

int main ()
{
long int i=0;

while (1)
{
cout << i++ << endl;

if (kbhit() == 1)
if (getch () == 'x')
break;
}

getch ();
return 0;
}

sina.es
یک شنبه 01 فروردین 1395, 12:21 عصر
# include <iostream>
# include <conio.h>
using namespace std;

int main ()
{
long int i=0;

while (1)
{
cout << i++ << endl;

if (kbhit() == 1)
if (getch () == 'x')
break;
}

getch ();
return 0;
}


کار کرد!!!!
واقعا ممنون خیلی لطف کردید ولی فکر کنم نکته اصلی تو خط 13 بود درسته؟ تابع اصلی مورد نظر همون هس
اگه میشه یک توضیح در بارش بدید ممنون:قلب::قلب::قلب::قلب:

zero_ox
یک شنبه 01 فروردین 1395, 14:06 عصر
سلام :
تابع ()kbhit چک می کنه صفحه کلید فشرده شده یا نه اگرفشرده شده باشه یک مقدار غیر صفر بر می گردونه درغیراین صورت صفر رو برمی گردونه . تو برنامه بالا شرط حلقه که true هست بنایراین i++ می شه تا برسه به تابع kbhit() اگر کلیدی فشرده شده شرط حلقه true می شه بعد درشرط بعدی چک می کنه اگرکلید فشرده شده x بود با دستور break ازحلقه خارج می شه .

Prototype: int kbhit(void);
نیازی به ==1 هم نیست داخل شرط kbhit() کافیه .

pbm_soy
یک شنبه 01 فروردین 1395, 14:34 عصر
میتوانید بجای تابع kbhit از تابع bioskey هم میتوانید استفاده کنید که در هدرفایل bios قرار دارد البته نمیدانم در کامپایلر شما همچین چیزی وجود دارد یا خیر ولی در کامپایلرهای قدیمیتر وجود داشت!

این تابع به ازای هرمقداری که بهش میدهید کارخاصی انجام میدهد

sina.es
دوشنبه 09 فروردین 1395, 09:30 صبح
سلام :
تابع ()kbhit چک می کنه صفحه کلید فشرده شده یا نه اگرفشرده شده باشه یک مقدار غیر صفر بر می گردونه درغیراین صورت صفر رو برمی گردونه . تو برنامه بالا شرط حلقه که true هست بنایراین i++ می شه تا برسه به تابع kbhit() اگر کلیدی فشرده شده شرط حلقه true می شه بعد درشرط بعدی چک می کنه اگرکلید فشرده شده x بود با دستور break ازحلقه خارج می شه .

Prototype: int kbhit(void);
نیازی به ==1 هم نیست داخل شرط kbhit() کافیه .

این کد ++c ؟
فکر کنم در html چنین کد هایی می نویسیم:متفکر::متفکر::متفکر:

sina.es
دوشنبه 09 فروردین 1395, 09:31 صبح
یک نکته دیگه اگر بخواهیم با کلید اینتر این کار انجام بشه باید چی کار کنیم؟

کامبیز اسدزاده
دوشنبه 09 فروردین 1395, 09:33 صبح
این کد ++c ؟
فکر کنم در html چنین کد هایی می نویسیم:متفکر::متفکر::متفکر:

:قهقهه: مشکل از ادیتور سایت هست کد هارو در تگ مربوطه درست تشخیص نمیده.
منظورشون این کد هست.


Prototype: int kbhit(void);
نیازی به ==1 هم نیست داخل شرط kbhit() کافیه .