2012-04-24 1 views
0

У меня есть исходный код для USB-связи («класс USBThread»), написанный на Borland C++ и использующий библиотеку Visual Component Library («vcl.h»). Теперь моя задача - перенести это на Visual C++, потому что мы не покупали Borland C++.Что заменить TThread

Но этот «класс USBThread» имеет наследование от базового класса в «vcl.h», называемого «TThread».

Могу ли я спросить, в Visual C++, Какой базовый класс можно использовать для замены «TThread» в качестве нового источника наследования?

Исходный код использует „WaitFor“ и „Прервать“ методы прихода TThread, Я не знаю, как реализовать эти два menthods с Visual C++.

Спасибо!

+0

Это зависит от ситуации. Для чего вам нужен этот класс замещения? –

+0

Я хочу реализовать методы «WaitFor» и «Terminate» в Visual C++, эти два метода наследуются от TThread в Borland C++. – user1352716

+0

Я полагаю, у вас нет исходного кода для 'TThread', не так ли? Я не думаю, что в Visual C++ есть многопоточный класс, поэтому вам просто нужно использовать функции потоковой обработки Win32 API напрямую. –

ответ

0

Это, вероятно, будет трудной exerice имо, но это выглядит как Boost.Thread с помощью join для WaitFor и interrupt для Terminate заставит вас начать.

Я основываю это на обзоре docs for VCL found here. Я говорю, что это, вероятно, будет сложно, потому что VCL может иметь поведение, которое недокументировано или неожиданно неожиданно.

0

Хотя вы могли бы перевести TThread класс в библиотеки VCL в C++, это не будет работать очень хорошо, потому что она опирается на некоторые семантики Delphi, которые просто не перевести на C++ вообще (в частности, метод TObject::AfterConstruction()). Лучше всего просто перезаписать USBThread, чтобы напрямую использовать функции потока Win32, а именно CreateThread() и WaitForSingleObject(). Для Terminate() вы просто устанавливаете флаг bool где-то, что ваша процедура потока может периодически смотреть и останавливать работу, когда она установлена ​​в true.