Не могу понять эту ошибку при создании потока - PullRequest
1 голос
/ 21 июня 2010
     HANDLE  hThread;
     DWORD   dwThreadId;

         hThread = CreateThread( 
     NULL,                   // default security attributes
     0,                      // use default stack size  
     MyThreadFunction,       // thread function name
     0,                      // argument to thread function 
     0,                      // use default creation flags 
     &dwThreadId);           // returns the thread identifier  <--Debugger takes me to this line?

Ошибка указывает третий параметр, но когда я дважды щелкаю по ошибке, она возвращает меня к последнему параметру?
Пытается запустить пример CreateThread msdn http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx

error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'
        None of the functions with this name in scope match the target type

Ответы [ 4 ]

3 голосов
/ 21 июня 2010

Отладчик просто выводит вас в конец оператора.

В любом случае ваша сигнатура функции неверна и должна соответствовать типу указателя функции. Для CreateThread должно быть:

DWORD WINAPI ThreadProc(LPVOID lpParameter);
2 голосов
/ 21 июня 2010

Ваша подпись функции не соответствует ожидаемой подписи.

Ваша MythreadFunction функция должна возвращать ULONG.

Что-то вроде:

DWORD WINAPI MyThreadFunction(LPVOID lpParameter) {
}
1 голос
/ 21 июня 2010

При нажатии на ошибку вы переходите к последнему параметру, поскольку функция перехода к ошибке может идти только по операторам , а весь вызов функции - это один оператор.

По сути, ваша проблема в том, что MyThreadFunction имеет неправильную подпись. Это должно быть unsigned long __stdcall MyThreadFunction(void*) (или его эквивалент), но вы написали void MyThreadFunction(void) (или его эквивалент).

1 голос
/ 21 июня 2010

Если дважды щелкнуть ошибку, появится источник, где произошла ошибка. Поскольку выражение вызова функции занимает несколько строк, оно выберет последнюю строку выражения.

Проблема в том, что MyThreadFunction не имеет правильного типа функции. MyThreadFunction - это функция, которая не принимает аргументов и ничего не возвращает. Вам нужно передать указатель на функцию, которая принимает один аргумент (void*) и возвращает unsigned long.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...