נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עזרה בנושא THREADING

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
dotNet2005
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 27 July 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 7
נשלח בתאריך: 28 July 2007 בשעה 13:05 | IP רשוּם
ציטוט dotNet2005

שלום,

תוכלו בבקשה להסביר איך להפעיל  thread .

לדוגמא יש לי את פונקציה factorial  ואני רוצה שיחשבו אותה 4 threads .
אני יודעת שצריך להגדיר את ה- threads  ב- main להפעיל עליהם מטודת Strat
את פונקציה של עצרת אני הגדרתי ב- class אחר.
 וצריך למשל  לחשב 100! (100 עצרת),
thread 1 צריך לחשב מ- 1 עד 25
thread 2 יחשב מ- 26 עד 50 וכד'


בנוסף אני לא מבינה איפה אני צריכה להגדיר את delegate , אני יודעת שהוא צריך להיות עם אותה חתימה כמו פונקצית factorial . (האם הוא צריך להיות באותו class שנמצאת הפונקציה או ב MAIN ) .

תודה מראש.



__________________
framework 2.0
חזרה לתחילת העמוד הצג את כרטיס החבר של dotNet2005 חפש הודעות אחרות של dotNet2005
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 28 July 2007 בשעה 14:55 | IP רשוּם
ציטוט shoshan

רק אל תגזימי עם N כי צריך שהתוצאה תיכנס כמו שצריך ב-long.

קוד:
using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[ ] args)
        {
            Console.WriteLine(calculateFact(25, 1));
        }

        private static long calculateFact(int N, int threadCount)
        {
            Thread[ ] threads = new Thread[threadCount];
            long[ ] results = new long[threadCount];
            GeneralCounter counter = new GeneralCounter();
            for ( int i = 0 ; i < threadCount ; i++ )
            {
                threads[i] = new Thread(new ParameterizedThreadStart(factPart));
                threads[i].IsBackground = true;
                threads[i].Start(new factInfo(N,i,results,counter));
            }
            while ( counter.count < threadCount ) ;
            return multiplyAll(results);
        }

        private static long multiplyAll(long[ ] results)
        {
            long result = results[0];
            for ( int i = results.Length - 1 ; i > 0 ; --i )
                result *= results[i];
            return result;
        }

        static void factPart(object data)
        {
            factInfo info = (factInfo)data;
            int min = 1 + info.N * info.index / info.results.Length;
            int max = info.N * ( info.index + 1 ) / info.results.Length;
            long result = min;
            for ( int i = min + 1 ; i <= max ; i++ )
                result *= i;
            info.results[info.index] = result;
            ++info.counter.count;
        }
    }

    class factInfo
    {
        public GeneralCounter counter;
        public long[ ] results;
        public int index;
        public int N;

        public factInfo(int N, int index, long[ ] results, GeneralCounter counter)
        {
            this.N = N;
            this.index = index;
            this.results = results;
            this.counter = counter;
        }
    }

    class GeneralCounter
    {
        public int count = 0;
    }
}


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
dotNet2005
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 27 July 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 7
נשלח בתאריך: 28 July 2007 בשעה 19:50 | IP רשוּם
ציטוט dotNet2005

תודה רבה



__________________
framework 2.0
חזרה לתחילת העמוד הצג את כרטיס החבר של dotNet2005 חפש הודעות אחרות של dotNet2005
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 28 July 2007 בשעה 20:21 | IP רשוּם
ציטוט shoshan

אין בעד מה, אגב, עכשיו כשאני חושב על זה אין צורך במערך של התוצאות, אפשר ישר לשמור
את התוצאה הסופית ושכל thread כבר יכפיל לבד.

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה