Вызов функций, предназначенных для потоков, обычно
У меня есть функция с прототипом
DWORD WINAPI blah(LPVOID arg);
Который должен был использоваться с CreateThread для многопоточного приложения.
Я называю это с CreateThread без проблем. Но потом где-то в коде, я называю это нормально, просто бла (NULL). Когда он попадает в эту часть, он падает. Это потому, что часть WINAPI делает это __stdcall, и вы не можете просто вызывать такие функции __stdcall?
2 ответа
Это не из-за __stdcall
, Запустите вашу программу в отладчике и проверьте, какая строка кода вызывает сбой.
Единственная проблема будет, если blah()
конкретно звонит TerminateThread(
сам)
чтобы закончить, вместо того, чтобы просто вернуться с дна. CreateThread
call устанавливает адрес возврата таким образом, чтобы при возврате blah() он вызывал TerminateThread
,
Если у blah() нет такого кода, то необходимо проверить код, чтобы выяснить, выполняет ли он что-то специфичное для потока, что приводит к его сбою. Случайно, я не могу думать ни о чем другом (кроме TerminateThread()), которое может привести к тому, что написанный код станет потоком, который будет препятствовать его непосредственному вызову.