Как решить проблему вызова функции DLL - PullRequest
1 голос
/ 06 октября 2010

У меня есть несколько запросов относительно DLL,

1) Если я загружу DLL во время выполнения, я думаю, DLL будет в отдельном потоке, верно?

2) Если я вызываю функцию, присутствующую в DLL, и эта функция занимает много времени, чтобы вернуть значение, то как я могу заставить поток приложения ждать, пока функция DLL вернет значение.

Как я могу решить вторую проблему

Ответы [ 4 ]

7 голосов
/ 06 октября 2010

Ваше предположение неверно.

Если вы загружаете DLL, а затем вызываете одну из ее функций, вызов выполняется синхронно, как и любой другой вызов функции.

Нет абсолютно никаких причин, по которым DLL следует загружать в другой поток. Вы можете сделать это, конечно, но это не по умолчанию.

1 голос
/ 06 октября 2010

Вы используете темы QT? В противном случае я не могу понять, почему вы бы использовали тег "qt".

Что касается ваших проблем, мне кажется, что вы должны создать другой поток, который будет вызывать функцию, содержащуюся в DLL. Когда этот поток завершается, вы можете предположить, что у вас есть результат функции.

1 голос
/ 06 октября 2010

1) Нет. DLL это просто код.Код в dll вызывается в контексте любых создаваемых вами потоков.*

2) В результате ваше приложение будет ожидать завершения работы библиотеки DLL.

  • Dll может создавать рабочие потоки в результате вызова приложением библиотеки DLL.Однако вы не можете вызвать напрямую в поток.Любой вызов, который делает ваш код, всегда будет происходить синхронно в текущем потоке.
0 голосов
/ 06 октября 2010
  1. Вы также можете использовать в переключателе DLL_THREAD_ATTACH.
  2. Вы должны вызывать эту функцию из потока, который хотите замедлить, или получить Thread Suspend до вызова функции и Thread Resume после.
...