ايران ويج

نسخه‌ی کامل: یک سوال در مورد زمان بندی cin
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
میخواستم ببینم که میشه CIN رو زمان بندی کرد ؟؟؟؟؟
به طوری که مثلا برای 1 ثانیه منتظر Cin بمونه اگه داده ای که وارد نشد خط بعدی رو کامپایل کنه؟؟؟؟؟؟
(۲۸-اردیبهشت-۱۳۸۹, ۱۴:۱۸:۱۷)Fire_Falcon نوشته است: [ -> ]سلام دوستان
میخواستم ببینم که میشه CIN رو زمان بندی کرد ؟؟؟؟؟
به طوری که مثلا برای 1 ثانیه منتظر Cin بمونه اگه داده ای که وارد نشد خط بعدی رو کامپایل کنه؟؟؟؟؟؟

سلام
اتفاقا منم چند روزه درگير اين قضيه هستم. وقت هم ندارم برم دنبالش Biggrin
مي خوام هر موقع كه كاربر كليدي رو فشار داد بره تابعي رو اجرا كنه !‌
مثل رويداد ها در وي‍‍ژوال بيسيك و ...

يه سري سورس كد رو هم گير اوردم و شبيه سازي رويداد ها رو ترمينال به زبان c++ رو انجام ميده!!!
هنوز تستش نكردم !‌
درباره اين موضوع زير تو گوگل سرچ كن . به نتايجي ميرسي Amaze
کد:
c++ key envent
جواب گرفتي به ما هم بگو بزنيم تو كدمون !‌‌ نشد هم خودم چند روز ديگه مجبورم برم دنبالش Confused

موفق باشيد
من الان حضور ذهن ندارم دقیقا اسم توابع رو بگم (مدتیه C++ کار نمی کنم!!)
ولی اینی که میگی کاری نداره.

زمان سیستم رو بگیر. (خیلی راحته. اسم هدرش یادم نیست)
تو یه حلقه پایین بودن اون کلیدی که مد نظر داری رو چک کن (دستور اینم یادم نیست!! Biggrin نسخه جدید getch ...) همینطور تو حلقه چک کن ببین از اون زمانی که اول گرفتی یک ثانیه گذشته یا نه ...
سلام

اینجوری که من از حرف هاتون فهمیدم شما می خواین که هر موقع که کاربر خواست خودش داده وارد کنه !!!‌ و برنامه تون به کار خودش ادامه بده !!!‌
برای اینکار شما باید از تابع ReadConsoleInput استفاده کنید . در مثال زیر این تابع رو داخل یه حقله گذاشته شده که همیشه اجرا میشود و مقدار بازگشتی بررسی میشود !
برای مثال اگر کاربر x را فشار بده برنامه بسته میشود !‌

کد:
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    HANDLE hIn;
    HANDLE hOut;
    COORD KeyWhere;
    COORD MouseWhere;
    COORD EndWhere;
    bool Continue = TRUE;
    int KeyEvents = 0;
    int MouseEvents = 0;
    INPUT_RECORD InRec;
    DWORD NumRead;
    hIn = GetStdHandle(STD_INPUT_HANDLE);
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    cout << "Key Events   : " << endl;
    cout << "Mouse Events : " << flush;
    KeyWhere.X = 15;
    KeyWhere.Y = 0;
    MouseWhere.X = 15;
    MouseWhere.Y = 1;
    EndWhere.X = 0;
    EndWhere.Y = 3;
    while (Continue)
    {
        ReadConsoleInput(hIn,
                         &InRec,
                        1,
                         &NumRead);
        switch (InRec.EventType)
        {
        case KEY_EVENT:
            ++KeyEvents;
            SetConsoleCursorPosition(hOut,
                                     KeyWhere);
            cout << KeyEvents << " ScanCode : ";
            cout << hex << InRec.Event.KeyEvent.wVirtualScanCode << flush;
            if (InRec.Event.KeyEvent.uChar.AsciiChar == 'x')
            {
                SetConsoleCursorPosition(hOut,
                                         EndWhere);
                cout << "Exiting..." << endl;
                Continue = FALSE;
            }
            break;
        case MOUSE_EVENT:
            ++MouseEvents;
            SetConsoleCursorPosition(hOut,
                                     MouseWhere);
            cout << MouseEvents << flush;
            break;
        }
    }
    return 0;
}

این کد فقط رو سیستم عامل ویندوز کار میکنه . من خود م رو کامپایلر Borland تست کردم و مشکلی نداشته

موفق باشید Biggrin