כותב |
|
איציק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 21 October 2008 בשעה 18:36 | | IP רשוּם
|
|
|
|
קוד:
DWORD Thread1ID; HANDLE Thread1; //thread's handle
DWORD WINAPI Thread1Function(LPVOID lParam) {
return 0; }
Thread1=CreateThread(NULL,0,Thread1Function,0,0,&Thread1ID);
|
|
|
איך אני יכול להעביר פרמטרים לTHREAD ? ניסיתי כל מיני אפשרויות ולא הלך לי.. אני חייב למצוא דרך להעביר פרמטרים לפונקציית THREAD..
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 21 October 2008 בשעה 20:32 | | IP רשוּם
|
|
|
|
תסתכל על הפרמטרים של הפונקציה CreateThread, ספציפית פרמטר מספר 4:
__in_opt LPVOID lpParameter, אתה יכול להעביר בו כל מצביע או int שאתה מעוניין בו.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
איציק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 22 October 2008 בשעה 17:10 | | IP רשוּם
|
|
|
|
תודה על התגובה. ניסיתי בדרך שלך אבל נתקלתי בבעיה.. אחרי שהעברתי את הפרמטר מסוג string הוא הגיע לשם אבל כאשר רציתי להשתמש בו זה עשה לי בעיות קימפול..
זאת הפונקציה:
קוד:
DWORD WINAPI AlertThread(LPVOID dialogMessage) { MessageBox(NULL, *dialogMessage.c_str() , "Error", MB_ICONERROR | MB_OK); return 0; }
|
|
|
וככה קראתי לה:
קוד:
Thread1=CreateThread(NULL,0, AlertThread, &dialogMessage,0,&Thread1ID);
|
|
|
|
חזרה לתחילת העמוד |
|
|
איציק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 22 October 2008 בשעה 17:11 | | IP רשוּם
|
|
|
|
אגב זאת השגיאה:
קוד:
.cpp(5) : error C2228: left of '.c_str' must have class/struct/union 1> type is 'LPVOID'
|
|
|
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 22 October 2008 בשעה 21:36 | | IP רשוּם
|
|
|
|
אתה יודע מה זה ואיך עושים castים ?
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
איציק אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 23 October 2008 בשעה 07:41 | | IP רשוּם
|
|
|
|
כן.. אני פשוט לא תיכננתי כבר קרוב לשנה.. אגב ניסיתי את הקוד הבא:
קוד:
DWORD WINAPI AlertThread(LPVOID dialogMessage) { string msg = static_cast<string>(*dialogMessage); MessageBox(NULL, msg.c_str() , "Error", MB_ICONERROR | MB_OK); return 0; }
|
|
|
ניסיתי גם בלי * בdialogMessage ולא הלך.
וקיבלתי את הארור הבא:
קוד:
1>.\I.cpp(5) : error C2100: illegal indirection 1>.\I.cpp(5) : error C2440: 'static_cast' : cannot convert from 'LPVOID' to 'std::string'
|
|
|
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 24 October 2008 בשעה 01:17 | | IP רשוּם
|
|
|
|
למה להמיר ל-string ואז להמיר ל-c_str כשאפשר פשוט להמיר ל-c_str ?
אתה מקבל POINTER, צריך לעשות לו CAST ל-POINTER לסוג אחר...
אז ככה שאם כבר CAST למצביע ל-STRING (ולהעביר מצביע ל-STRING).
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 October 2008 בשעה 03:09 | | IP רשוּם
|
|
|
|
ניסיתי כמו שאמרת
קוד:
DWORD WINAPI AlertThread(LPVOID dialogMessage) { string* msg = reinterpret_cast<string*> (dialogMessage); MessageBox(NULL, (*msg).c_str() ,"Error", MB_ICONERROR | MB_OK); return 0; }
Thread1=CreateThread(NULL,0, AlertThread, &dialogMessage, 0, &Thread1ID);
|
|
|
זה עובר קומפילציה אבל המצביע MSG בכלל ריק ובגלל זה קופץ חלון אזהרה ללא הודעה.. :\
כבר השתגעתי מהקטע הזה ..
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 24 October 2008 בשעה 09:39 | | IP רשוּם
|
|
|
|
אם הוא היה ריק היית מקבל exception.
המחרוזת בפנים ריקה.
או לחלופין המחרוזת היא ב-ANSI והתוכנית שלך ב-UNICODE.
שים לב אם אתה משתמש בקידוד הנכון ומקבל את התוכן של המחרוזת ממקום נכון ובקידוד נכון.
בלי קשר שים breakpoint ותראה מה קורה עם כל הפוינטרים לפני ואחרי הקריאה וולאן הם מצביעים.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 24 October 2008 בשעה 19:25 | | IP רשוּם
|
|
|
|
המצביעים בסדר גמור.. המצביע msg מצביע כמו שצריך על הכתובת של dialogMessage. שמתי breakpoints ובדקתי את זה מזמן.. וכן התכוונתי שהמחרוזת ריקה.. זה פשוט מדפיס לי הודעת שגיאה בלי טקסט.. אני לא מבין מה הבעיה.. אמרת משהו על ANSI ו UNICODE. מה אני יכול לעשות אם המחרזות היא בANSI והתוכנית שלי בUNICODE?
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 24 October 2008 בשעה 21:48 | | IP רשוּם
|
|
|
|
תקרא על הפונקציות CharToWideChar או על המאקרו Text כדי להמיר ANSI ל-UNICODE.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|