Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Borland C++ builder main loop
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=10296
Страница 1 от 1

Автор:  slav4o.com [ Чет Юли 05, 2012 4:39 pm ]
Заглавие:  Borland C++ builder main loop

Здравейте. Напоследък малко по-сериозно се захванах с това нещо. Става дума за C++ Builder 4 но предполагам и за другите версии е същото. Та къде се намира на това нещо main() функцията където да цикли постоянно докато не се спре програмата ?

Автор:  amdatlon [ Чет Юли 05, 2012 8:39 pm ]
Заглавие:  Re: Borland C++ builder main loop

Чакай малко сега, имаш в пред вид за РС (Windows/Linux/...) -програмиране ли?
Ако е така, там стоят малко по различно нещата, програмата не цикли в някакъв безкраен цикъл, както при микроконтролерите.
А чака докато се появи накакво събития-натискане на бутон, цъкане с мишка, придвижване с мишка, поява на прекъсване от вън и т.н.т.
Тогава всяко събитие се обработва от съответна функция. Като свърши функцията, пак си чака следващото събитие.

Дано да съм ти разбрал правилно въпроса де :)

Автор:  slav4o.com [ Пет Юли 06, 2012 4:07 am ]
Заглавие:  Re: Borland C++ builder main loop

Ами да правилно ми го обясни дори, ама как тогава да накарам да се задейства когато получи нещо по RS232 като изобщо не *бава за такива неща :)

Автор:  ike [ Пет Юли 06, 2012 5:59 pm ]
Заглавие:  Re: Borland C++ builder main loop

Прегледай winapi -то http://msdn.microsoft.com/en-us/library ... ial_topic4
http://www.wrongbananas.net/cpp/2006.09 ... loops.html
http://www.tetraedre.com/advanced/serial2.php

Автор:  amdatlon [ Пет Юли 06, 2012 8:26 pm ]
Заглавие:  Re: Borland C++ builder main loop

Да точно това което колегата "ike" ти е посочил, трябва да разучиш.
Не съм в час със С++, мога да ти дам пример само за делфи, пак е със WinApi ф-ии.



Примерно натискаш един бутон и стартираш кода по долу.
Един вид тази ф-я WaitCommEvent си се джитка докато не попучи нещо по порта и тогава ти връща отговор.
После ти трябва да прочетеш полученото с ReadFile.
Но има и настройки на порта преди тези операции.

Код:
if ( WaitCommEvent (Cid,   dwCommEvent, nil)) then
  begin

ReadFile(Cid,Input,NumOfBytesToRead,Result,@Overlapped);
   //Reading_Timeout:=false;
  end;

Автор:  slav4o.com [ Съб Юли 07, 2012 12:18 am ]
Заглавие:  Re: Borland C++ builder main loop

Идеята ми е както си седи програмата и като дойде нещо по ком-а да се изпише, без да се натискат бутони. Да имам една функция като тия void __fastcall TForm1::Button1Click {}
само, че да е void __fastcall TForm1::RS232DataReady {} но сега ще чета да видим какво ще излезе.

Автор:  ike [ Съб Юли 07, 2012 10:03 am ]
Заглавие:  Re: Borland C++ builder main loop

Сложи един таймер и от него можеш да проверяваш на всеки 500мС дали има нещо ново.

Автор:  slav4o.com [ Съб Юли 07, 2012 5:59 pm ]
Заглавие:  Re: Borland C++ builder main loop

Мда аз точно това и щях да направя, но къде да я сложа тая проверка, като процесора отива някъде да смята, а това което аз мога да добавя в програмата са някакви софтуерни прекъсвания.

п.с. малко по-късно : Aaaaa стана има таймер функция, върши идеална работа. Благодаря много. Там вътре написах проверката на COM-а :)

Автор:  syscop [ Съб Юли 07, 2012 8:38 pm ]
Заглавие:  Re: Borland C++ builder main loop

Ако съм разбрал добре какво искаш да правиш елегантното решение е да изнесеш цялата комуникация в отделна нишка. Да ползваш таймер не е най-добрата реализация - не можеш да определиш точно на колко време да правиш проверка(и).

Автор:  amdatlon [ Съб Юли 07, 2012 8:46 pm ]
Заглавие:  Re: Borland C++ builder main loop

slav4o.com написа:
Идеята ми е както си седи програмата и като дойде нещо по ком-а да се изпише, без да се натискат бутони. Да имам една функция като тия void __fastcall TForm1::Button1Click {}
само, че да е void __fastcall TForm1::RS232DataReady {} но сега ще чета да видим какво ще излезе.


Е точно де,
WaitCommEvent ( то името си показва) чака за поява на събитие по КОМ порта.
Бутона го дадох за пример, че чрез него веднъж стартираш тази функция и програмата си чака докато се появи нещо. Може и без бутон, примерно още при стартиране на приложението да се пуска ф-ята.
Но за да стане добре трябва да се направи отделна нишка за
тази функция, тъй като приложението ще блокира ( върти безкраен цикъл) докато не дойде нещо по порта.
А като е в две нишки - (едната е на основната програма ) ще може с някои хватки да прекъснеш чакането , или да си вършиш други работи.
Не обяснявам добре, особено ако не си го правил ще ти се стори мъгла :)

ЕДИТ: ааа писали сме по едно и също време с "syscop" за нишките :)

Автор:  slav4o.com [ Нед Юли 08, 2012 6:12 am ]
Заглавие:  Re: Borland C++ builder main loop

Ами в тия статии пише за treads, ама аз не знаех, че изобщо съществували такива неща. Бая четене ще трябва. Не са ми ясни доста основни неща. Явно тия програми работят по друг начин. Все пак нали може да са запуснати няколко наведнъж, явно че не е както при дос или микроконтролер.

Автор:  amdatlon [ Нед Юли 08, 2012 1:18 pm ]
Заглавие:  Re: Borland C++ builder main loop

Аа не се притеснявай, никой не се е родил научен :)
На мен също са ми малко мъгла тия нишки, особено ако са повече, и преди да ми се наложи да правя нещо с тях нищо пък не ми говореше.
Но нуждата учи. Ако искаш може първо да го направиш едно нишково, т.е. да нямаш нишки ( еднолинейна програма).
Пускаш си чакането на данни от ком порта и програмата зависва така. Когато го докараш до работещо приложение ( нищо че "зависва") може да пробваш да го принесеш в друга "нишка".

Или с други думи това си изпълнение на две(или повече) отделни програми паралелно.
Но ако сега започваш с Windows програмирането , доста ще ти е трудно да се хвърлиш на многозадачността.
Започни с простички линейни програми, за да може да свикнеш с начина на действие.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/