אתה צריך לדאוג למימוש החלון וה-message pump. כמו שאינגו אמר, DispatchMessage חייבת להיקרא כדי שה-Callback תיקרא; כדי לקרוא ל-Dispatch, אתה צריך GetMessage - והיא דורשת hwnd.
צדק ברנדל כשאמר שאפשר לקרוא לSETTIMER ללא חלון, וצדק אלדד כשאמר שצריך לממש MESSAGE LOOP, אבל לא חייבים ליצור שום חלון (ושום חלון גם לא יווצר כאשר קוראים לSETTIMER). צריך בסה"כ לממש MESSAGE LOOP פשוט ביותר (גם ללא חלון - עם NULL) רק כדי לא לתקוע את היישום ולהכניס אותו למצב IDLE במהלך הסינכרון של הקרנל. הCALLBACK תיקרא כאשר יעבור פרק הזמן המתאים ללא שום קשר לחלון.
דומה למה שתיארת (רק שבהתחלה אני כותב שתי הודעות ומקבל שני משתנים ורק אז באה הלולאה) ובמקום לחכות בין ריצה אחת של הלולאה לשנייה הוא לא עושה כלום במשך זמן מסויים ואז מבצע את מה שבתוך הלולאה בלי לחכות אתה יודע במקרה מה הבעיה? תודה מראש
#include<WINDOWS> #include<iostream.h> void main() { int i,num; long time; cout<<"enter the number of times"; cin<<num; cout<<"enter the time diffrence between each time"; cin<<time; for(i=0;i<num;i++) { cout<<"sending..."; Sleep(time); } }
באחת מההרצות נתתי ל-time ערך של 5000 וזה עדיין הדפיס את הפלט על המסך בלי לחכות ולפני שהוא הדפיס את הערך הוא חיכה במשך זמן מסוים רעיון אולי להוסיף מעל הלולאה הראשית לולאה נוספת (כלומר שיווצר מצב של לולאה בתוך לולאה) ובגלל שכעת (בלי הוספת הלולאה) ה-Sleep מופעל לפני הלולאה הלולאה שתיוסף תגרום לו לפעול עוד פעמים ואז אפשר להוסיף תנאי בתוך הלולאה המשנית שיגרום ל-Sleep לפעול בכמות הפעמים שאני רוצה אתה חושב שזה יעבוד? שוב תודה
אבל יכול להיות שמה שאתה צריך זה פשוט להחליף בין פקודת ה-SLEEP לבין הפלט של "SENDING" ? אני מבין שאתה רוצה שיקרה הדבר הבא: יקלט NUM (נניח 3) יקלט TIME (נניח 5) ...כלום במשך 5 שניות... יודפס SENDING ...כלום במשך 5 שניות... יודפס SENDING ...כלום במשך 5 שניות... יודפס SENDING אני צודק? אם כן, אז באמת כל מה שאתה צריך, זה להחליף את סדר הפקודות SLEEP וההדפסה של SENDING (בתוך הלולאה).