שליחת כתובת פונקציה לthread,

זויברג

New member
שליחת כתובת פונקציה לthread,

אני רוצה להכין thread חדש שקורא לפונקציה חברה במחלקה. הקריאה לthread נעשית גם כן בתוך פונקציה חברה בתוך הthread. הפונקציה החברה שאני רוצה שתהיה הthread מוגדרת כך:
DWORD WINAPI TWindow::mainLoop(LPVOID n)​
והקריאה לthread נראית כך:
hMainLoopThread = CreateThread(NULL,0,TWindow::mainLoop,0,0,&(dMainLoopTreadID));​
אבל אני מקבל את השגיאה הזאת:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'​
מישהו יודע איך אפשר להגדיר את הפונקציה כך שתהיה מתאימה או אולי איך אפשר לבצע cast למצביע של כתובת לפונקציה ככה שיהיה אפשר לקרוא לפונקציה חברה במחלקה כגוף של thread?
 

annefan

New member
היא צריכה להיות סטטית

אם אני לא טועה. לפונקציות חברות לא סטטיות יש כפרמטר ראשון את this, וממילא היא לא מתאימה ל-prototype של הפונקציה ש-CreateThread מצפה לקבל.
 

זויברג

New member
תודה רבה,

כן, ככה פתרתי את זה, אני יוצר פונצקיה סטטית (ללא המשתנה this במחסנית), ושולח את המשתנה n המובנה של הפונקציה של הthread כthis, ומשם קורא לפונקציה של המחלקה הספציפית.
 
למעלה