Вызов функций, предназначенных для потоков, обычно

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

DWORD WINAPI blah(LPVOID arg);

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

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

2 ответа

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

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

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

Другие вопросы по тегам