21-12-2005, 11:04
|
|
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
...
אכן הגעת לנקודות מעניינות.
בכל מקרה, כפי שכבר נחשתי מקודם, אתה זקוק לעבודה עם 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.
|