Как завершить функцию C++ Вызывается форма C# Использование p/invoke
Я вызываю функцию C++ из C# с помощью p/invoke, эта функция имеет бесконечный цикл (захват кадров в файл), который должен быть прерван при возникновении события в C#.
Как я могу разорвать этот цикл (который завершает эту функцию)?
Я попытался запустить эту функцию в потоке в C# и прервать этот поток, когда необходимо прекращение. Но функция прерывания не сработала.
Thread thread = new Thread(myMethod);
thread.Start();
// to terminate the function
thread.Abort(); //didn't respond
1 ответ
Решение
Вероятно, самый безопасный способ - это сделать две вещи:
- Выставьте другую функцию с именем (например)
StopRecording
который устанавливает глобальную переменную внутри вашего нативного кода - Внутри вашей основной функции, проверьте значение global в начале каждой итерации цикла, чтобы увидеть,
StopRecording
был вызван (и если это так, вырваться из цикла)
Это позволяет ему завершаться естественно, не требуя каких-либо жестких завершений.