ביצוע פעולה מסויימת בתוכנית במקביל לתוכנית עצמה. - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


xgamer

Recommended Posts

שלום לכם.

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

תחת יש לך פונקציות לייצירת 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.";

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...