Вызов функций, предназначенных для потоков, обычно - PullRequest
0 голосов
/ 08 августа 2010

У меня есть функция с прототипом

DWORD WINAPI blah(LPVOID arg);

, которая должна была использоваться с CreateThread для многопоточного приложения.

Я вызываю ее с CreateThread без проблем.Но потом, где-то еще в коде, я называю это нормально, просто бла (NULL).Когда он попадает в эту часть, он падает.Это потому, что часть WINAPI делает это __stdcall, и вы не можете просто вызывать такие функции __stdcall?

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Это не из-за __stdcall. Запустите вашу программу в отладчике и проверьте, какая строка кода вызывает сбой.

0 голосов
/ 08 августа 2010

Единственная проблема будет в том случае, если blah() определенно вызовет TerminateThread( self ) до конца, вместо того, чтобы просто вернуться с дна.Вызов CreateThread устанавливает адрес возврата таким образом, чтобы при возврате blah () он вызывал TerminateThread.

Если blah () не имеет подобного кода, топроверка кода необходима, чтобы увидеть, что он каким-то образом делает что-то конкретное, что делает его неудачным.Случайно, я не могу думать ни о чем другом (кроме TerminateThread ()), которое может привести к тому, что написанный код станет потоком, который не позволит вызвать его напрямую.

...