| Автор |
Съобщение |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Borland C++ builder main loop
Здравейте. Напоследък малко по-сериозно се захванах с това нещо. Става дума за C++ Builder 4 но предполагам и за другите версии е същото. Та къде се намира на това нещо main() функцията където да цикли постоянно докато не се спре програмата ?
|
| Чет Юли 05, 2012 4:39 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Borland C++ builder main loop
Чакай малко сега, имаш в пред вид за РС (Windows/Linux/...) -програмиране ли? Ако е така, там стоят малко по различно нещата, програмата не цикли в някакъв безкраен цикъл, както при микроконтролерите. А чака докато се появи накакво събития-натискане на бутон, цъкане с мишка, придвижване с мишка, поява на прекъсване от вън и т.н.т. Тогава всяко събитие се обработва от съответна функция. Като свърши функцията, пак си чака следващото събитие. Дано да съм ти разбрал правилно въпроса де 
|
| Чет Юли 05, 2012 8:39 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Borland C++ builder main loop
Ами да правилно ми го обясни дори, ама как тогава да накарам да се задейства когато получи нещо по RS232 като изобщо не *бава за такива неща 
|
| Пет Юли 06, 2012 4:07 am |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Borland C++ builder main loop
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Пет Юли 06, 2012 5:59 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Borland C++ builder main loop
Да точно това което колегата "ike" ти е посочил, трябва да разучиш. Не съм в час със С++, мога да ти дам пример само за делфи, пак е със WinApi ф-ии. Примерно натискаш един бутон и стартираш кода по долу. Един вид тази ф-я WaitCommEvent си се джитка докато не попучи нещо по порта и тогава ти връща отговор. После ти трябва да прочетеш полученото с ReadFile. Но има и настройки на порта преди тези операции.
|
| Пет Юли 06, 2012 8:26 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Borland C++ builder main loop
Идеята ми е както си седи програмата и като дойде нещо по ком-а да се изпише, без да се натискат бутони. Да имам една функция като тия void __fastcall TForm1::Button1Click {} само, че да е void __fastcall TForm1::RS232DataReady {} но сега ще чета да видим какво ще излезе.
|
| Съб Юли 07, 2012 12:18 am |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Borland C++ builder main loop
Сложи един таймер и от него можеш да проверяваш на всеки 500мС дали има нещо ново.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Съб Юли 07, 2012 10:03 am |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Borland C++ builder main loop
Мда аз точно това и щях да направя, но къде да я сложа тая проверка, като процесора отива някъде да смята, а това което аз мога да добавя в програмата са някакви софтуерни прекъсвания. п.с. малко по-късно : Aaaaa стана има таймер функция, върши идеална работа. Благодаря много. Там вътре написах проверката на COM-а 
|
| Съб Юли 07, 2012 5:59 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2283
|
 Re: Borland C++ builder main loop
Ако съм разбрал добре какво искаш да правиш елегантното решение е да изнесеш цялата комуникация в отделна нишка. Да ползваш таймер не е най-добрата реализация - не можеш да определиш точно на колко време да правиш проверка(и).
_________________ Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!
|
| Съб Юли 07, 2012 8:38 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Borland C++ builder main loop
Е точно де, WaitCommEvent ( то името си показва) чака за поява на събитие по КОМ порта. Бутона го дадох за пример, че чрез него веднъж стартираш тази функция и програмата си чака докато се появи нещо. Може и без бутон, примерно още при стартиране на приложението да се пуска ф-ята. Но за да стане добре трябва да се направи отделна нишка за тази функция, тъй като приложението ще блокира ( върти безкраен цикъл) докато не дойде нещо по порта. А като е в две нишки - (едната е на основната програма ) ще може с някои хватки да прекъснеш чакането , или да си вършиш други работи. Не обяснявам добре, особено ако не си го правил ще ти се стори мъгла  ЕДИТ: ааа писали сме по едно и също време с "syscop" за нишките 
|
| Съб Юли 07, 2012 8:46 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Borland C++ builder main loop
Ами в тия статии пише за treads, ама аз не знаех, че изобщо съществували такива неща. Бая четене ще трябва. Не са ми ясни доста основни неща. Явно тия програми работят по друг начин. Все пак нали може да са запуснати няколко наведнъж, явно че не е както при дос или микроконтролер.
|
| Нед Юли 08, 2012 6:12 am |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Borland C++ builder main loop
Аа не се притеснявай, никой не се е родил научен  На мен също са ми малко мъгла тия нишки, особено ако са повече, и преди да ми се наложи да правя нещо с тях нищо пък не ми говореше. Но нуждата учи. Ако искаш може първо да го направиш едно нишково, т.е. да нямаш нишки ( еднолинейна програма). Пускаш си чакането на данни от ком порта и програмата зависва така. Когато го докараш до работещо приложение ( нищо че "зависва") може да пробваш да го принесеш в друга "нишка". Или с други думи това си изпълнение на две(или повече) отделни програми паралелно. Но ако сега започваш с Windows програмирането , доста ще ти е трудно да се хвърлиш на многозадачността. Започни с простички линейни програми, за да може да свикнеш с начина на действие.
|
| Нед Юли 08, 2012 1:18 pm |
|
|