עבור לתוכן

ביצוע פעולה מסויימת בתוכנית במקביל לתוכנית עצמה.

Featured Replies

פורסם

שלום לכם.

אני בונה תוכנית מסויימת ואני צריך להוסיף במקביל לתוכנית פעולה שנניח כל 10 MSEC תפעל.

נניח יש תוכנית רגילה מדפיסה קולטת לא משנה, וכל פרק זמן מסוים מפסיק את הפעולה (לזמן קצר) ופונה למשהו אחר (כמו עידכון של משהו או קריאה לפונקציה) ואז

חוזר לאיפה שהפסיק, ואז זה נראה כאילו זה עובד במקביל.

אני לא יודע בדיוק איך להסביר, נראה לי קוראים לזה ט/תרדינג.

אז אפשר איזה הסבר ואיך ליישם את זה? תודה רבה.

פורסם

כן, צריך להשתמש ב-threads (אתה לא חייב, כי אתה יכול לממש את זה בעצמך, אבל מומלץ ככה).

באיזו שפה אתה כותב? (זה מאוד שונה משפה לשפה, וגם בין סביבות עבודה שונות)

פורסם
  • מחבר

שכחתי לציין, אני עובד ב בc++. בבית אני עובד עם DEVCPP לבנתיים (עוד מעט נעבור ל VC++)

ובבית הספר ב VC++ 6.

תודה רבה.

פורסם

ב- C++ אין ספרייה שנותנת לך threads.

תחת windows יש לך פונקציות לייצירת threads כמו beginthread.

אם אתה משתמש ב- MFC, אז שם יש wrappers קצת יותר נוחים אליהם עם CWinThread

אופציה אחרת לגמרי היא עבודה עם Interrupts, שהן יותר מדויקות, יותר מסוכנות, אבל יש ספריות כמו Allegro שמקלות את העבודה איתן.

פורסם
  • מחבר

אוקיי תודה רבה.

חשבתי זה הולך להיות פשוט, אני אקרא על זה מחר.

מישהו מכיר אולי איזה ספריה שעושה את זה כבר?

נניח לבצע קוד כל פרק זמן מסויים, מה אתה אומרים עולה לכם משהו לראש? משהו מוכן אני מתכוון.

שוב תודה רבה.

פורסם

multithreading הוא רחוק מלהיות פשוט.

יש עוד אופציה ב-windows: אפשר לאתחל timer דרך קריאת מ"ה ולהגיד לו לקרוא לפונקציה מסויימת אחרי פרק זמן מסויים. תבדוק אם זה מספיק לך.

פורסם

נשמע לי שאתה לא צריך את כל אלה. חבל לך להסתבך עם ת'רדים (למרות שבאופן כללי זה יכול להיות מאוד מעניין ומועיל ללמוד את הנושא, אז בלי קשר הייתי ממליץ ללמוד את זה).

ממה שהבנתי על התוכנית שלך, אתה יכול לדגום את הזמן בתחילתה, וכל לולאה לדגום את הזמן ולבדוק כמה זמן עבר, ואם עבר יותר מ-X זמן, תקרא לפונקציה שלך. ככה אין לך בעיות שאתה צריך לדאוג להן במקרה של ת'רדים. אגב, כמובן שלפני שאתה קורא לפונקציה, רצוי לשמור את הזמן האחרון שדגמת כ"זמן אפס"...

פורסם
  • מחבר

חשבתי על זה, ואחרי שהבהרתם לי שטרדים זה נושא מסובך אני אוותר על זה.

בקשר לטיימר, חשבתי גם על משהו כזה, הקוד יהיה פחות אלגנטי כי אני אצטרך לפזר IF אחרי כל קטע שעשוי להיות ארוך.

איך אני עובד עם זה? אני זוכר יש ספריה שקוראים לה TIMER אפשר הסבר קצרצר על זה? איך להכניס את הזמן הנוכחי לתוך משתנה (רגיל או מיוחד)

ולבצע עליו פעולת חיסור ואיפוס.

תודה רבה ויום טוב.

פורסם

ישנה פונקציה בשם time שמחזירה לך את מספר השניות הנוכחי. כדי להשתמש בה:

#include <time.h>

כדי לבדוק אם עברו שתי שניות:

int t = time(NULL);

if(time(NULL)==t+2)
cout<<"2 secs passed.";

פורסם

אני הייתי נותן למעבד\מערכת ההפעלה לעשות את שלהם במקום לרשום שורה ככה שורה ככה.

פורסם

יש גם את העניין הקטן של לולאות busy-waiting.

פורסם

אם תתן קצת יותר פרטים על מה בדיוק אתה מנסה לעשות, נראה לי שיהיה אפשר לעזור לך יותר.

פורסם
  • מחבר

מספר שניות לא יעזור לי, אני צריך לפי מאיות.

אז ככה התוכנה היא בשביל משחק איקס עיגול שמשוחק על לוח משחק שבניתי, הלוח מתחבר למחשב.

עכשיו על הלוח ירשם התוצאה ליד כל שחקן עם צג 7SEG עכשיו יש לי 4 חוטים ששולטים עלייהם, 3 שולטים על המידע שיוצג והרביעי על איזה צג יפעל.

כדי שזה יראה כאילו שנייהם פועלים בו זמנית אני אצטרך לעשות את המעבר שלהם בפחות מ 30MSEC (משהו באזור). חשבתי לבצע את זה בטרד אבל הבנתי

שזה מסובך, עם הספריה של ה TIME זה נראה לי אפשרי.

עכשיו איך מוצאים את מספר המאיות שחלפו מתחילת התוכנית? ובכל קטע שעשוי להיות בעל זמן רב אני ישים את ההפניה לפונקציה שתבצע את זה.

מקווה שהסברתי טוב, אם משהו לא מובן אני יסביר שוב.

פורסם

יש בספריית time.h מספר פונקציות שיכולות להחזיר זמן ברזולוציה גבוהה יותר משניות.

אבל! קח בחשבון שבתלות במ"ה וכו', הדיוק של השיטה הוא מוגבל.

באיזה פלטפורמה (מ"ה + חומרה) התוכנה שלך תרוץ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים