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

نام تاپیک: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

  1. #1

    Smile نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    سلام
    من دو تا Thread اصلی دارم
    ی تابعی رو می خوام اجراکنم فقط تو thread2 کار می کنه . ولی من تو thread1 هستم.
    برای حل این مشکل می خوام پارامترها تابع رو به صورت گلوبال ذخیره کنم بعد تا وقتی که thread2 به قسمتی که می خوام نرسیده صبر کنه و بعد که اون قسمت تموم شد کارشو ادامه بده
    خودم دقیقا نمی دونم چی کار کنم با WaitFor.. و .. باید ی جوری کنترل کنم.
    ممنون. درضمن Win32 باشه .

  2. #2

    نقل قول: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    منظورت از این که تو thread1 هستی چیه؟ اگه با یه دستور این دوتانخ رو ساختی هر دو دارن همزمان پیش میرن و هیچ امتیازی نسبت به هم ندارن
    تو نخ دوم هم بستگی داره اون قسمتی که میخوای برنامه بهش برسه چی باشه وقتی متیغراتو گلوبال تعریف کنی بادستورای شرطی ساده احتمالا میشه منتظر موند

  3. #3

    نقل قول: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    نه ببین خوب دو تا خط که هم دارن واس خودشون می رن من می خوام ی تابعی رو تو Thread1 صدا زدم صبر کنه تا Thread2 برسه به جایی که می خوام و بعد دستور رو اجرا کنه و ..
    ی همچین جیزی خودم نوشتم نتیجه داد


    BOOL gAppLoop = true;
    HANDLE gEvent = nullptr;
    volatile BOOL gDoCommand = FALSE;
    HANDLE gThreads[2];


    void DoCommand()
    {
    if(gDoCommand)
    {
    //call function ...
    SetEvent(gEvent);
    gDoCommand = false;
    }
    }

    DWORD Thread1(void* ptr)
    {
    while(gAppLoop)
    {
    if(rand() % 33 = 2)
    {
    gDoCommand = true;
    ::WaitForSingleObject(gEvent, INFINITE);
    }
    //...
    }
    }

    DWORD Thread2(void* ptr)
    {
    while(gAppLoop)
    {
    DoCommand();
    //...
    }
    }

    int main(int argc, char** argv)
    {
    lThreads[0] = ::CreateThread(nullptr, 0, Thread1, nullptr, 0, nullptr);
    lThreads[1] = ::CreateThread(nullptr, 0, Thread2, nullptr, 0, nullptr);
    gEvent = ::CreateEventA(nullptr, TRUE, FALSE, nullptr);
    ::WaitForMultipleObjects(2, lThreads, true, INFINITE);
    }

  4. #4

    نقل قول: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    با Critical Section میتونی پیادش کنی .

  5. #5
    کاربر دائمی آواتار fjm11100
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    تهران
    سن
    43
    پست
    658

    نقل قول: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    راه خیلی ساده اش یک flag است که مثلا صفره و با رسیدن به اون خط یک میشه و ترد منتظر فقط این فلگ را چک میکنه

  6. #6

    نقل قول: نگه داشتن یک Thread تا رسیدن یک Thread دیگه به جای مشخص شده

    با Critical Section میتونی پیادش کنی .
    Critical Section ها رو بلدم ولی تو این جایی که من می خواستم فکر نکنم بکار بیاد .
    البته فکر کنم با ی چنین چیزی بشه

    DWORD Thread1(void* ptr)
    {
    while(gAppLoop)
    {
    if(rand() % 33 = 2)
    {
    gDoCommand = true;
    ::WaitForSingleObject(gCiritialSection, INFINITE);
    }
    //...
    }
    }

    DWORD Thread2(void* ptr)
    {
    while(gAppLoop)
    {
    EnterCiritialSection(gCiritialSection);
    //codes
    LeaveCiritialSection(gCiritialSection);
    }
    }


    بحرحال مشکل حل شده ممنون از همگی

تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: یک شنبه 29 مرداد 1391, 22:17 عصر
  2. ثابت نگه داشتن scroll
    نوشته شده توسط nima_jafari در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: سه شنبه 22 آذر 1384, 20:41 عصر
  3. طرز نگه داشتن بیش از یک هاست
    نوشته شده توسط javadonline در بخش شبکه و Networking‌
    پاسخ: 1
    آخرین پست: شنبه 11 تیر 1384, 15:13 عصر
  4. حرکت کاراکتر با نگه داشتن یک دکمه
    نوشته شده توسط Random در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 11
    آخرین پست: پنج شنبه 19 خرداد 1384, 14:16 عصر
  5. فعال نگه داشتن فرم در حین انجام کار
    نوشته شده توسط nasr در بخش برنامه نویسی در Delphi
    پاسخ: 9
    آخرین پست: دوشنبه 04 خرداد 1383, 12:07 عصر

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

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