Отговори на тема  [ 12 мнения ] 
Borland C++ builder main loop 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Borland C++ builder main loop
Здравейте. Напоследък малко по-сериозно се захванах с това нещо. Става дума за C++ Builder 4 но предполагам и за другите версии е същото. Та къде се намира на това нещо main() функцията където да цикли постоянно докато не се спре програмата ?

_________________
https://github.com/slav4ocom/


Чет Юли 05, 2012 4:39 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Borland C++ builder main loop
Чакай малко сега, имаш в пред вид за РС (Windows/Linux/...) -програмиране ли?
Ако е така, там стоят малко по различно нещата, програмата не цикли в някакъв безкраен цикъл, както при микроконтролерите.
А чака докато се появи накакво събития-натискане на бутон, цъкане с мишка, придвижване с мишка, поява на прекъсване от вън и т.н.т.
Тогава всяко събитие се обработва от съответна функция. Като свърши функцията, пак си чака следващото събитие.

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


Чет Юли 05, 2012 8:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Borland C++ builder main loop
Ами да правилно ми го обясни дори, ама как тогава да накарам да се задейства когато получи нещо по RS232 като изобщо не *бава за такива неща :)

_________________
https://github.com/slav4ocom/


Пет Юли 06, 2012 4:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение 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

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Юли 06, 2012 5:59 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение 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;


Пет Юли 06, 2012 8:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Borland C++ builder main loop
Идеята ми е както си седи програмата и като дойде нещо по ком-а да се изпише, без да се натискат бутони. Да имам една функция като тия void __fastcall TForm1::Button1Click {}
само, че да е void __fastcall TForm1::RS232DataReady {} но сега ще чета да видим какво ще излезе.

_________________
https://github.com/slav4ocom/


Съб Юли 07, 2012 12:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Borland C++ builder main loop
Сложи един таймер и от него можеш да проверяваш на всеки 500мС дали има нещо ново.

_________________
Warriors of the Night, ASSEMBLER!!!


Съб Юли 07, 2012 10:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Borland C++ builder main loop
Мда аз точно това и щях да направя, но къде да я сложа тая проверка, като процесора отива някъде да смята, а това което аз мога да добавя в програмата са някакви софтуерни прекъсвания.

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

_________________
https://github.com/slav4ocom/


Съб Юли 07, 2012 5:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2283
Мнение Re: Borland C++ builder main loop
Ако съм разбрал добре какво искаш да правиш елегантното решение е да изнесеш цялата комуникация в отделна нишка. Да ползваш таймер не е най-добрата реализация - не можеш да определиш точно на колко време да правиш проверка(и).

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ! Опонентът се оборва с ФАКТИ, а не с ЕПИТЕТИ!


Съб Юли 07, 2012 8:38 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Borland C++ builder main loop
slav4o.com написа:
Идеята ми е както си седи програмата и като дойде нещо по ком-а да се изпише, без да се натискат бутони. Да имам една функция като тия void __fastcall TForm1::Button1Click {}
само, че да е void __fastcall TForm1::RS232DataReady {} но сега ще чета да видим какво ще излезе.


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

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


Съб Юли 07, 2012 8:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: Borland C++ builder main loop
Ами в тия статии пише за treads, ама аз не знаех, че изобщо съществували такива неща. Бая четене ще трябва. Не са ми ясни доста основни неща. Явно тия програми работят по друг начин. Все пак нали може да са запуснати няколко наведнъж, явно че не е както при дос или микроконтролер.

_________________
https://github.com/slav4ocom/


Нед Юли 08, 2012 6:12 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Borland C++ builder main loop
Аа не се притеснявай, никой не се е родил научен :)
На мен също са ми малко мъгла тия нишки, особено ако са повече, и преди да ми се наложи да правя нещо с тях нищо пък не ми говореше.
Но нуждата учи. Ако искаш може първо да го направиш едно нишково, т.е. да нямаш нишки ( еднолинейна програма).
Пускаш си чакането на данни от ком порта и програмата зависва така. Когато го докараш до работещо приложение ( нищо че "зависва") може да пробваш да го принесеш в друга "нишка".

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


Нед Юли 08, 2012 1:18 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни