Как завершить функцию 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 ответ

Решение

Вероятно, самый безопасный способ - это сделать две вещи:

  1. Выставьте другую функцию с именем (например) StopRecording который устанавливает глобальную переменную внутри вашего нативного кода
  2. Внутри вашей основной функции, проверьте значение global в начале каждой итерации цикла, чтобы увидеть, StopRecording был вызван (и если это так, вырваться из цикла)

Это позволяет ему завершаться естественно, не требуя каких-либо жестких завершений.

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