У меня есть приложение C #, использующее C ++ DLL. C ++ DLL очень проста. Я могу вызвать один метод, и у него есть метод обратного вызова. Метод обратного вызова должен завершить , прежде чем я смогу обработать следующий элемент.
Проблема в том, что я могу обрабатывать только одну команду за раз, но я хочу обработать их как можно быстрее.
Интерфейс поддельного / упрощенного кода для c ++ DLL:
void AddNumbers(int a, int b, AddNumbersCallback callback);
Теперь попробуем его использовать:
void DoStuff()
{
if(MyCollection.HasStuff)
AddNumbers(MyCollection.First().a, MyCollection.First.b, StuffDone);
}
void StuffDone(int result)
{
//I wish I could process the next item here, but the callback isn't done!
//DoStuff();
}
Корень проблемы в том, что я хочу выполнить код после обратный вызов: done .
Моим временным решением было поставить в очередь элемент в пуле потоков и подождать 100 мс. Как правило, это даст методу время для «завершения».
И "нет", я не могу изменить DLL.