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

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



  #2  
ישן 21-12-2005, 10:14
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 1 שנכתבה על ידי frost_force שמתחילה ב "שאלה על לחיצה על המקלדת"

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

בכל מקרה, אני רוצה להבין דבר אחד.
יש לך קטע קוד שרץ כל 500msec, ובתוכו אתה רוצה לבדוק האם נלחץ מקש כלשהו קודם?
אם כן - האם שמרת את התו האחרון שהוקלט?
אתה יכול ליצור מן תור של אירועים - לפני שאתה מריץ את הקטע הקוד, אתה ממלא תור שבו יהיו את כל מקשים שנלחצו עד הריצה של הקטע הנ"ל.
בתוך קטע, אתה פשוט "מוציא" מן התור את ה"אירועים" (המקשים שנלחצו) ומטפל בהם.

אם לא הבנתי אותך נכון, אז תקן אותי.
יום טוב.
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 21-12-2005, 10:41
  frost_force frost_force אינו מחובר  
 
חבר מתאריך: 27.06.05
הודעות: 2,185
בתגובה להודעה מספר 2 שנכתבה על ידי scripter שמתחילה ב "..."

תודה לך!

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

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

דיי חפרתי...

תודה רבה!!
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 21-12-2005, 11:04
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 3 שנכתבה על ידי frost_force שמתחילה ב "תודה לך! אולי בעצם לא הלכתי..."

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

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

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

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

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

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

DWORD WINAPI Function( LPVOID lParam )
{
int c;
while( 1 )
{
c = getchar();
printf( "Hey you pressed ENTER\n" );
}
return 0;
}

void bla( void )
{
printf( "ever N secs\n" );

}

int main( void )
{
HANDLE hThread;
DWORD dwThreadId;

hThread = CreateThread(
NULL, 0, Function, NULL, 0, &dwThreadId
);
while( 1 )
{
bla();
Sleep( 500 );
}
return 0;
}
לא בדקתי את הקוד, אבל אמור לעבוד אני מניח.
מכיוון שאין לי הרבה זמן כרגע - התבססתי לגמרי על לולאות אינסופיות בתוכנית הנ"ל, לא בדקתי ערכים מוחזרים וכו' - כל זה תעשה אצלך.

בכל מקרה, מקווה שהרעיון ברור עכשיו.
אהה כן, CreateThread - היא בעצם פונקציה מ-WinAPI.
http://msdn.microsoft.com/library/d...reatethread.asp

אם לא הבנת את כל הקוד - לא נורא, לא ציפיתי שתבין בפעם הראשונה, תשאל ואנסה להסביר שוב.
(תנסה להפעיל את הקוד בכל מקרה, כדי לבדוק האם זה בדיוק מה שרצית.. או שאני סתם ממלא אותך בשטויות )
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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