نمایش نتایج 1 تا 22 از 22

نام تاپیک: انجام دادن همزمان دو عمل در C

  1. #1

    انجام دادن همزمان دو عمل در C

    چطور می شود دو عمل را به طور همزمان در C انجام داد؟ مثلا همزمان که یک حلقه اجرا می شود، یک داده از کیبرد گرفته شود (بدون آنکه حلقه لحظه ای متوقف شود.)
    یا به عبارت دیگر :برنامه ای بنویسید که یک کاراکتر از چپ به راست از صفحه عبور کند و کاربر همزمان دو عدد را وارد برنامه کند و آن دو عدد در صفحه چاپ شوند. :wink:

  2. #2
    Thread
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  3. #3
    نقل قول نوشته شده توسط Inprise
    Thread
    یعنی چی؟

  4. #4
    چطور می شود دو عمل را به طور همزمان در C انجام داد؟
    Thread
    یعنی همین . برای مطالعه جزئیات بیشتر عنوان Thread رو روی فروم جستجو کن ؛ قبلا برای توسعه روی ویندوز و لینوکس مفصلا" در موردش توضیح دادم.
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  5. #5
    با تشکر اگه می شه لینکش رو بذارید چون من پیداش نکردم
    :sad2:

  6. #6
    وارد بخش جستجوی سایت بشو . جستجو رو به قسمت C محدود کن و کلمهء Thread‌رو سرچ کن ؛
    UNIX is simple. It just takes a genius to understand its simplicity
    -- Dennis Ritchie

  7. #7
    وارد بخش جستجوی سایت بشو . جستجو رو به قسمت C محدود کن و کلمهء Thread‌رو سرچ کن
    من این کار رو کرده بودم ولی موردی که در ارتباط با thread ها چیزی یاد داده باشه پیدا نشد.
    در هر صورت اگه شما یا کس دیگه ای لطف کنید کد کوتاهی بنویسید که طرز استفاده از thread ها در اون مشخص باشه ممنون می شم.(البته من فقط می خوام یک حلقه و تابع getch رو همزمان استفاده کنم)

  8. #8
    سلام



    (بدون آنکه حلقه لحظه ای متوقف شود.)


    امکان نداره که حلقه ای دائماً در حال گردش باشه و کار دیگه ای بشود کرد!


    دستورات در کامپیوتر خط به خط اجرا میشود حالا اگر بخواهیم که به فرض مانند ویندوز و یونیکس چند برنامه در کنار هم اجرا شود باید سی پی یو تقسیم شود.

    یعنی در حقیقت ویندوز به هر برنامه در حال اجرا یک تایم تخصیص میدهد آن پروسه را اجرا و به سراغ بعدی میرود و از اول تا آخر پروسه ها این کار را انجام میدهد.


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




    یا به عبارت دیگر :برنامه ای بنویسید که یک کاراکتر از چپ به راست از صفحه عبور کند و کاربر همزمان دو عدد را وارد برنامه کند و آن دو عدد در صفحه چاپ شوند.

    شما کاری که باید انجام دهید به طور ساده این است:
    1- صفحه کلید چک شود آیا کاراکتری وارد شده؟ اگر وارد شده آن دریافت شود. و اگر پایان عملیات است از این حلقه خارج شود.
    2- کاراکتر از چپ به راست یک خانه منتقل گردد.
    3-به مرحله 1 برو.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    آبان 1383
    محل زندگی
    تهران
    پست
    81

    Re: انجام دادن همزمان دو عمل در C

    نقل قول نوشته شده توسط Random
    چطور می شود دو عمل را به طور همزمان در C انجام داد؟ مثلا همزمان که یک حلقه اجرا می شود، یک داده از کیبرد گرفته شود (بدون آنکه حلقه لحظه ای متوقف شود.)
    یا به عبارت دیگر :برنامه ای بنویسید که یک کاراکتر از چپ به راست از صفحه عبور کند و کاربر همزمان دو عدد را وارد برنامه کند و آن دو عدد در صفحه چاپ شوند. :wink:
    دوست عزیز تابع kbhit رو امتحان کن !
    با این تابع می تونی همزمان هم از صفحه کلید ورودی بگیری! با کمک تابع getch

  10. #10
    همونطور که بقیه هم گفتند شما باید با thread ها کار کنید.
    هر برنامه یک loop هست ، حالا اگر شما بخواهید در یک برنامه چند loop درست کنید به طوری که ویندوز آنها رو (مجازی) به طور همزمان اجرا کند با thread بسازید. مبحث multithreading هم خیلی مبحث پیچیده و طولانی هست ، ولی واسه شروع اگر می خواهی thread بسازی اینجوریه :
    اول یک function تعریف می کنی که توش در واقع هر کدی می تونی بنوسی که جدا از کد اصلی برنامه و همزمان اجرا می شه .
    DWORD WINAPI MyThread(void* param) 


    با این خط هم توی برنامه اصلی می تونی thread رو بسازی که در یکی از پارامترهاش آدرس MyThread هست.
    CreateThread(0, 0,MyThread, NULL, 0, NULL)

    iهمون موقع که thread ساخته می شه برنامه اصلی به کارش ادامه می ده و کد داخل MyThread هم به طور همزمان اجرا می شه.
    برای اطلاعات بیشتر به MSDN مراجعه کن.

  11. #11
    برای کاری که تو میخوای اصلا thread لازم نیست! این کد رو نگاه کن تا ببینی چی میگم. اونو من برای این نوشته بودم که توی یه Editor وقتی منتظره تا کلید زده بشه همزمان ساعت رو هم نشون بده:

    unsigned char getkey()
    {
    static struct time t;
    static char s[9];
    while(!kbhit())
    {
    gettime(&t);
    sprintf(s,"%2d:%02d:%02d",t.ti_hour, t.ti_min, t.ti_sec);
    print(70,0,showtime?s:" ",0x71);
    }
    return(getch());
    }


    من توی کد برنامم برای گرفتی کلید بجای getch از این تابع استفاده میکردم

  12. #12
    درسته برای کاری که شما می خوایین thread لازم نیست ، من post اول رو خوندم و post های بعدی رو دقت نکردم ، فکر کردم کلی می گی

  13. #13
    از همه ی دوستان متشکرم :)
    Inprise
    rezaTavak
    karim_medusa
    سپول
    مهدی

    برنامه استاد شد. :wink:

  14. #14
    کاربر تازه وارد آواتار daneshjoye_azad
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    روستای امیرآباد - مازندران
    پست
    39
    سلام
    ببین عزیزم برای اینکه برنامه برای شمال دو کار را انجام بده باید کل دستورات رو تو یه یه حلقه for بینهایت بزاری و او کازهایی زو که میخوای با کنترل خودت انجام بشن رو توی دستور زیر بزاری
    یه if مینویسی که شرط اون عباری ()kbhit باشه حالا یه getch

  15. #15
    کاربر تازه وارد آواتار daneshjoye_azad
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    روستای امیرآباد - مازندران
    پست
    39
    میدی
    و ادامه کار .ببخشین چون کار دارم ادامه رو اگه خواستی میتونی براک پیام بزاری.

  16. #16

    Question

    سلام.

    من هم دقیقا همین مشکل رو دارم. می خوام یه حلقه با شرط while(1) داشته باشم (فرض کنید توش یک انیمیشن انجام میشه) و در عین حال به کدهای برنامم برسم.

    اون روشی که آقای سپول گفتن رو نتونستم درست به کار ببریم. میشه یه مثال ساده بذارین؟
    لطفن منطق برنامم رو هم عوض نکنید(بحث رو عوض نکنین)

    خیلی لازمش دارم. ممنون.

  17. #17
    کاربر جدید آواتار active66
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    قائمشهر
    پست
    23
    سلام دوست عزیز.
    فکر کنم منظورت یه برنامه شبیه برنامه زیره.

    #include <conio.h>
    #include<iostream.h>

    int main(void)
    { char ch;
    for (;;){
    cprintf("a");
    if (kbhit())
    cout<<"b";

    }
    return 0;
    }

  18. #18

    Question

    ممنون که جواب دادین. اما منظورم مشخصه که این نیست. من یه مثال زدم که یه کاراکتر بگیرد.
    بذارید اینجوری بگم:
    من می خوام موس درون برنامه کار کنه و میدونید کد موس یه حلقه ی بی نهایته!
    حالا من میخوام علاوه بر موس با صفحه کلید هم کار کنم. یعنی کلی کد و تابع دیگه باید خارج این حلقه و البته همزمان با آن انجام گیرد.
    حالا چی؟؟؟

  19. #19
    سلام
    وارد بخش جستجوی سایت بشو . جستجو رو به قسمت C محدود کن و کلمهء Thread‌رو سرچ کن ؛
    شرمنده , بنده هم تاپیکی با این مضمون که نویسندش شما باشین پیدا نکردم.
    درصورت امکان لینک اون تاپیک رو ذکر کنید.

  20. #20
    کاربر تازه وارد آواتار daneshjoye_azad
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    روستای امیرآباد - مازندران
    پست
    39
    ببین عزیزم

    من اینطوری شروع میکنم که ما یه قایق داریم که باید توی یه مسیر یه حرکت رفت و بر گشت داشته باشه .

    یه زیر دریایی دشمن هم داریم که باید به طور خودکار حرکت کنه مثل قایق .


    حالا ما یه زیر دریایی داریم که تحت کنترل ما هستش و میخواهیم یه بازی بسازیم که همه این کارها رو داشته باشه .

  21. #21
    کاربر تازه وارد آواتار daneshjoye_azad
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    روستای امیرآباد - مازندران
    پست
    39
    حالا ما میایم یه حلقه بینهایت میسازیم و توی اون میایم توابعی که قایق و زیر دریایی دشمن رو حرکت میده توی اون میذاریم .


    بعد اینکه این توابع رو قرار دادیم یه if میذاریم که شرط اون ()kbhit هستش و حالا توی اکولاد if
    یه switch میزاریم که switch میکنه getch رو .

    حالا میتونی توی case هات تعریف کنی که اگه کلید مثلا w فشرده شد کار فلان ! رو انجام بده .



    این هم از توضیح من ................................

  22. #22
    کاربر تازه وارد آواتار daneshjoye_azad
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    روستای امیرآباد - مازندران
    پست
    39
    حالا اگه هنوز متوجه نشدی یه ایمیل بزن برام تا یه نمونه برنامه برات بفرستم .


    خوب .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •