נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: Threads - C/C++

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
איציק
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט shoshan

תסתכל על הפרמטרים של הפונקציה CreateThread, ספציפית פרמטר מספר 4:

  __in_opt   LPVOID lpParameter,

אתה יכול להעביר בו כל מצביע או int שאתה מעוניין בו.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
איציק
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט shoshan

אתה יודע מה זה ואיך עושים castים ?


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
איציק
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט shoshan

למה להמיר ל-string ואז להמיר ל-c_str כשאפשר פשוט להמיר ל-c_str ?

אתה מקבל POINTER, צריך לעשות לו CAST ל-POINTER לסוג אחר...

אז ככה שאם כבר CAST למצביע ל-STRING (ולהעביר מצביע ל-STRING).


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אורח
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט shoshan

אם הוא היה ריק היית מקבל exception.

המחרוזת בפנים ריקה.

או לחלופין המחרוזת היא ב-ANSI והתוכנית שלך ב-UNICODE.

שים לב אם אתה משתמש בקידוד הנכון ומקבל את התוכן של המחרוזת ממקום נכון ובקידוד נכון.

בלי קשר שים breakpoint ותראה מה קורה עם כל הפוינטרים לפני ואחרי הקריאה וולאן הם מצביעים.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
אורח
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט shoshan

תקרא על הפונקציות CharToWideChar או על המאקרו Text כדי להמיר ANSI ל-UNICODE.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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