פורסם 2007 באוגוסט 1518 שנים אוקי שלום, אני חדש אבל בכל זאת אשמח עם תעזרו לי. בת דודה שלי עושה עבודה במסגרת התואר שלה, והיא צריכה תוכנית פשוטה. התוכנית תקלוט לחיצות של משתמש מהמקלדת (מספיק כמה כפתורים אם זה בעייתי). ותפלוט בצורת טקסט (קובץ נפרד או כל דרך תצוגה אחרת שאפשר להעתיק ממנה) את הזמנים של הלחיצות או את הפרש הזמנים בין לחיצה ללחיצה (עדיף הראשון אם זה לא בעייתי). הדיוק חשוב שיהיה יותר משניות (מאיות או מה שאפשר). אין צורך בכל מיני תחכומים וכד'. עכשיו, הידע שלי בשפות תיכנות ממש חלש, לצערי ואין לי את הזמן הדרוש ללמוד את הנושא. חבר שלי כתב לי תוכנית אחת בC++ אשר פולטת קובץ טקסט עם הזמנים. איך אין הוא יודע איך לדייק יותר משניות (הוא קורא את השעון של הוינדוס). אז אם מישהו יכול לכוון אשמח, אם יש צורך אני יכול להעלות את הקובץ עצמו. תוכנית שניה שהוא עשה בVB מודדת כמה זמן עובר בין לחיצה ללחיצה, בסוגריים בנוסף. במדידת MS. לא הבנו למה אבל יש שגיאה, כשעוברות נגיד 2 שניות זה רושם שעברו רק 50-150 מילישניות. הנה הקוד (אני יכול להעלות גם את התוכנה עצמה) Option Explicit Public cnt, pcnt As IntegerPrivate Sub Form_KeyPress(KeyAscii As Integer) Open "Log.txt" For Append As #1 Print #1, (Date & ", " & Time & "- " & Chr(KeyAscii) & "(" & (cnt - pcnt) & " ms)") Close #1 pcnt = cntEnd SubPrivate Sub Form_Load() cnt = 0 Open "Log.txt" For Append As #1 Print #1, "Activated on " & Date & ", " & Time Close #1End SubPrivate Sub Timer1_Timer() cnt = cnt + 1End Sub אני יודע שאתם בעניין של ללמד, ולא לבנות למישהו. ואני בעד הרעיון בכללי אבל בכל זאת אשמח אם מישהו יביא לי קוד מוכן שעושה את זה, אני אשמח (מבטיח לקרוא ולהבין במידת האפשר) אם לא אז לייעץ מה לשפר בקוד הקיים, או כיוונים או הצעות אחרות יתקבלו בברכה אם אתם חושבים שאין השאלה מתאימה לפורום ועברתי על חוק כלשהו תגידו, ואם אפשר תייעצו לאן אפשר לפנות בשאלתי נ.ב. אין לי תמורה מיוחדת בשביל מישהו שיבנה תוכנית, אבל כשבת דודה שלי תפרסם את העבודה שלה איפשהו באינטרנט אני מבטיח לשלוח לכם קישור עם הקרדיט שלכם תודה
פורסם 2007 באוגוסט 1518 שנים תזכור שהפעולה של פתיחת קובץ + כתיבה לתוכו היא פעולה שלוקחת "יחסית" הרבה זמן.זה אומר שהמדידה שלך תהיה מאוד לא מדוייקת (תדאג לעדכן את pcnt לפני שאתה כותב לתוך הקובץ).חוץ מזה, ה-interval של הטיימר לא מדויק כשמדובר במידות קטנות.יש ל-windows פונקציות שמחזירות את הזמן המדויק (דיוק של אלפיות שנייה), אתה מוזמן לחפש אותן ב-msdn (נראה לי שהפונקציה נקראת Now).
פורסם 2007 באוגוסט 1518 שנים מחבר אז בכללי אי הדיוק נובע מזה שהפעולות האחרות לוקחות זמן. ולכן האי דיוק שונה בין מעבד למעבד.בתכלס חשבנו על זה אבל ההפרשים גדולים מידי. חבר שלי כתב את הקוד הבאOption Explicit Public cnt, sc as IntegerPrivate Sub Form_Load() cnt=0 sc=Second(Time) Timer1.Interval=1 Timer1.Enabled=TrueEnd SubPrivate Sub Timer1_Timer() cnt=cnt+1 if Second(Time)-sc=1 then MsgBox cnt end ifend sub הקוד אמור לבדוק כמה מילישניות של התוכנה שקולות לשניה של הוינדוס.יוצא שזה משתנה כל פעם שמריצים. רעיונות?אה ולא מצאתי בMSDN את זה, אתה יכול להפנות אותי בלינק?
פורסם 2007 באוגוסט 1518 שנים זה ב- #C, אבל אני בטוח שתבין.המספרים בפלט הם הפרשי Ticks. כל תקתוק הוא 100 ננושניות. ע"מ להמיר למילישניות צריך לחלק ב TicksPerSecond { const int maxChars = 10; static void Main(string[] args) { long[] pressTimes = new long[maxChars]; int k = 0; while (k < maxChars) { Console.ReadKey(true); pressTimes[k++] = DateTime.Now.Ticks; } Console.WriteLine(); for (int i = 1; i < maxChars; i++) { long p = pressTimes[i - 1]; Console.Write((pressTimes[i] - p) + " "); } Console.WriteLine(); } } class Program
פורסם 2007 באוגוסט 1518 שנים תכין תשעון עם סטופר על 0.ולולאה בc++ אין סופית שאתה לחוץ על נגיד t היא מתחילה לעבוד.עכשיו תילחץ על שניהם ביחד.שמגיע דקה בשעון תעצור תלולאה ותיבדוק לאיזה מיספר הלולאה הגיע.נגיד מיספר 66658 אז תעשה לולאה שרצה מ 0 עד 66658 ותידע שזה דקה.דרך הגב אין לי מוסג בזה אני לומד בערך חודש מי ספר.
פורסם 2007 באוגוסט 1518 שנים הפתרון הזה ממש ממש גרוע:1. מחשבים שונים עובדים במהירויות שונות.2. אותו מחשב יעבוד במהירות שונה כל פעם שתריץ את התכנית (זה תלוי בעומס שיש על המערכת כרגע, וב-multiprocessing של חלונות).\3. עצם הריצה של הלולאה הזו תעמיס מאוד על המעבד לשווא.
פורסם 2007 באוגוסט 1518 שנים מחבר אוקי תודה לכולם, מצאתי קוד בVB שיושם ע"י חבר שלי (שוב אני מציין אני נוב בתחום ) Public Function MyTime() As String MyTime = Format(Now, "dd-MM-yyyy HH:nn:ss") & "." & Right(Format(Timer, "#0.00"), 2)End FunctionPrivate Sub Form_KeyPress(KeyAscii As Integer) Open "Log.txt" For Append As #1 Print #1, (MyTime & "- " & Chr(KeyAscii)) Close #1End SubPrivate Sub Form_Load() Open "Log.txt" For Append As #1 Print #1, "--Activated on " & MyTime & "--" Close #1End Sub והוא עובד. תודה לכווולם נ.ב. אפשר לעשות ככה שזה ימדוד כמה זמן כפתור לחוץ?
פורסם 2007 באוגוסט 1718 שנים הפתרון הזה ממש ממש גרוע:1. מחשבים שונים עובדים במהירויות שונות.2. אותו מחשב יעבוד במהירות שונה כל פעם שתריץ את התכנית (זה תלוי בעומס שיש על המערכת כרגע, וב-multiprocessing של חלונות).\3. עצם הריצה של הלולאה הזו תעמיס מאוד על המעבד לשווא. יש לך רעיון יותר טוב ליצור זמן ב c++.?
פורסם 2007 באוגוסט 1718 שנים http://www.codersource.net/cpp_date_time.htmlhttp://www.cplusplus.com/reference/clibrary/ctime/http://www.codeproject.com/datetime/datetimedisc.asp
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.