_beginthreadex will nicht kompilieren - was mache ich falsch?

11/08/2010 - 12:50 von Uwe Kotyczka | Report spam
Ich versteh's einfach nicht. Es scheint mir unmöglich zu sein,
_beginthreadex mit korrekten Parametern zu füttern. Um das
Problem reproduzierbar zu machen, habe ich ein neues
Konsole-Projekt erstellt und folgenden Code geschrieben:

unsigned __stdcall ThreadProc(LPVOID lpV)
{
static int aaa = *(int*)lpV;
for (int i = 0; i < 30; i++)
aaa += 2;
return 0;
}

int main(int argc, char* argv[])
{
int start = 102;
unsigned nId;
HANDLE hThread = _beginthreadex(NULL,
0,
ThreadProc,
&start,
0,
&nId);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return 0;
}

Ich bekomme immer einen C2440 Fehler und habe keine Idee, warum.
VC6 beschwert sich "cannot convert 'unsigned long' to 'void*'",
VS2003 beschwert sich "cannot convert from 'uintptr_t' to 'HANDLE'".

Wenn ich CreateThread anstelle von _beginthreadex (mit geringfügig
anderen Parametern) nehme, geht alles wie erwartet.

Kann mir irgendjemand sagen, was ich falsch mache?
 

Lesen sie die antworten

#1 Martin Richter [MVP]
11/08/2010 - 13:24 | Warnen spam
Hallo Uwe!

HANDLE hThread = _beginthreadex(NULL,
0,
ThreadProc,
&start,
0,
&nId);



_beginthreadex liefert kein HANDLE zurück. Schau Dir die Deklaration an.
HANDLE ist in der CRT unbekannt.
Du musst casten!

Martin Richter [MVP] WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written
program is its own hell!" The Tao of Programming
FAQ: http://www.mpdvc.de Samples: http://www.codeproject.com

Ähnliche fragen