DLL останавливает основной поток при запуске

Я вызываю DLL, написанную на C++ (VS2012), из программного обеспечения (LabView), и она загружает файл на сервер через FTP.

Пока DLL загружает файл (15 МБ), он не позволяет LabView продолжать выполнение других задач. Как можно решить эту проблему?


person LppEdd    schedule 30.05.2013    source источник
comment
Потоки или процессы?   -  person Some programmer dude    schedule 30.05.2013
comment
Да, отдельная ветка, но как это можно было сделать? У вас есть какая-нибудь ссылка, которая может помочь?   -  person LppEdd    schedule 30.05.2013
comment
Я не думаю, что кто-то мог бы действительно помочь вам с таким небольшим количеством информации. поскольку вы используете vs2012, вы можете использовать С++ 11 std::thread . или вы также можете использовать boost::thread   -  person user1810087    schedule 30.05.2013
comment
Я понимаю, но пока он загружается, он не вернет мне контроль над основным приложением, даже если я использую многопоточность, я думаю!   -  person LppEdd    schedule 30.05.2013
comment
попробуй это. сделать так, чтобы функция загрузки выполнялась в отдельном потоке.   -  person user1810087    schedule 30.05.2013


Ответы (2)


Независимо от того, что вам нужно сделать на стороне C++, чтобы сделать вызов потокобезопасным, вам нужно настроить вызов в LabVIEW так, чтобы он не запускался в потоке пользовательского интерфейса (что, как я полагаю, является конфигурацией по умолчанию из соображений безопасности). Дважды щелкните узел и выберите вариант запуска в любом потоке.

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

person Yair    schedule 30.05.2013

Операции с FTP носят долгосрочный характер. Такие операции лучше выполнять в другом потоке.

person fpohtmeh    schedule 30.05.2013
comment
Функция Dll также выполняется в основном потоке, и вы долго ждете приложения. Вы когда-нибудь работали с многопоточностью? Хороший пример здесь ссылка - person fpohtmeh; 30.05.2013
comment
Я никогда не работал с многопоточностью, поэтому я попросил помощи. Благодарю вас! - person LppEdd; 30.05.2013