לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

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



  #2  
ישן 16-12-2007, 18:43
  sigsig sigsig אינו מחובר  
 
חבר מתאריך: 23.11.07
הודעות: 187
בתגובה להודעה מספר 1 שנכתבה על ידי themvp שמתחילה ב "עצירה וחידוש לולאת for על ידי קליטת תו שפת c"

אפשר לפתור את זה בכמה דרכים. הדרך הקלה היא להכניס בדיקה בכל סיבוב של הלולאה שלך כדי לראות אם מישהו לחץ על כפתור העצירה. בזמן שהלולאה רצה זה לא מכביד על המחשב יותר מדי, כי ממילא הוא עושה עבודה. אבל מה קורה בזמן שהלולאה לא מבצעת את הפעולה? המחשב ממשיך לרוץ רק כדי לבדוק אם מישהו הפעיל אותה מחדש. מאוד לא יעיל ובזבזני.
הדרך הפחות קלה היא לעשות שני דברים בו-זמנית: גם להריץ את הלולאה וגם לחכות שמישהו ילחץ על הכפתור (ולא להמשיך כל עוד אין לחיצה על הכפתור). בשביל זה צריך להשתמש בנושא די כבד שנקרא THREADS שמאפשרים הרצת כמה משימות באותה תוכנית. לא נכנס לעוד פרטים כאן, אבל בגדול זה אמור לעשות את העבודה (בהנחה שאתה על WINDOWS ובלי בדיקת שגיאות):
קוד:
#include <stdio.h> #include <windows.h> #define STOP_KEY 's' // USED TO STOP THE LOOP #define QUIT_KEY 'q' // USED TO QUIT THE PROGRAM ALTOGETHER DWORD WINAPI ThreadProc(LPVOID pParam) { // DO YOUR LOOP WORK HERE, FOR EXAMPLE: int number = 0; while(true) { printf("%d\n", number++); Sleep(1000); } } void main(int argc, char** argv) { BOOL isThreadRunning = TRUE; // Create the worker thread HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL); // TODO: Check successfull thread creation here while(true) { int pressedKey = _getch(); // Block waiting for keypress if(pressedKey == STOP_KEY) { isThreadRunning ? SuspendThread(hThread) : // Suspend the worker thread ResumeThread(hThread); // Resume the worker Thread isThreadRunning = !isThreadRunning; // Negate worker thread status flag } else if (pressedKey == QUIT_KEY) break; } CloseHandle(hThread); // Destroy worker thread }
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 11:50

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר