![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
добрый.
вы мне не поможите решить след. проблему, которая заключается в след-щем : 1)на устройство подается набор данных -> настрайваемся на частоту транспондера ->начинается запись с данной частоты если есть сигнал с платы, если обьеем файла достигает 100 Мб, файл закрывать, открывать подобный файл.00N и продолжать запись. Если общий рамер файл,т.е.сумма всех разбитых = 700 Мб, остановить запись. Иногда на устройстве пропадает сигнал, для этого я ввел инкремент, если сигнала нету и if(инкремент++ = 200) то останавливаю запись, противном случае инкремент-- и запись в файл продолжается. Этот пункт выполняется на отлично, вопросов нету. 2)Когда на устройство падаю массив частот, плата настраивается последовательно на частоты, которые последовательно поступают из массива. Когда настроились на 1-ую частоту(ppfreq[0]) производяться дополнительные настройки и запись начинается. Проблема заключается в том, что иногда на устройстве пропадает сигнал, у меня запись для текущей частоты останавливается и начинается для след-ей и так для всех частот, что не есть хорошо. Как я понимаю надо ввести в for(int i=0; i < /*m_pOSDDlg->transpod_str_i*/2; i++){..} ф-цию, которая должна проверять состояние предедущего процесса. Предедущий процесс, должен заканчиваться в двух случаях: 1) либо инкремент++ = 200 2) либо достигли максимального размера файла после чего предедущ. процесс должен останавливаться и начинаться след. инкремент в цикле for(int i=0; ;) для подобных случаях воодят мютекс,если я не ошибаюсь,который является некоторым флагом состояния процесса. Вы не могли бы мне помочь, как правильно надо определить этот мьютекс и где его надо изменять. я Вам даю некоторую часть кода, сверху вниз они описываются как вызываются.
Это сообщение отредактировал(а) 2faust - 13.3.2009, 15:27 |
|||
|
||||
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
люди хелп, ну очень нужна помощь. никак не получается. как толково сделать так, чтобы запись для следующего эл-та из массива начиналась только тогда, когда для предедущего эл-та из массива выполнись только 2 условия: 1) вышли за инкремент 200 2)достигли масксимального размера файла. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
2faust, твой код слишком большой, в нем слишком долго разбираться, да и вряд-ли это возможно, так-как он неполный, к тому-же он специфичен для твоей задачи, в которой никто разбираться не будет
если можешь, сведи свой код к более простому случаю, что-бы там кроме проблемы ничего не осталось, тогда кто-нибудь поможет |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
для работы с устройствами как правило помогают конечные автоматы
еще говорят что надо отделять обработку от интерфейса и разбивать код на модули и\или классы |
|||
|
||||
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
вот попытался убрать многое, но основное всетаки оставил.
надеюсь код теперь более абстрактный :
если закрмментировать строчку else {Sleep(20);} то процесс не начнется даже для однократного случая. Это сообщение отредактировал(а) 2faust - 14.3.2009, 14:35 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
может перенести твою тему в ЦП?
не думаю, что здесь будут вникать в проект -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
2faust |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
добрый вечер.
да здесь вроде для людей сведующих ничего сложного. даже я слабый программист разорался немного на второй день. там основная проблема заключается в том что есть критическая секция в классе CKlassThread. я немогу понять как в этом классе можно изменить ее на событие,как пример, где можно отслеживать изменения в потоках. изначально запускается только один поток, дальше он прекращается в условии :
мне никогда не приходилось встречаться с поточностью. для сишных примеров мне немног понятно, а вот для с++ уже сложнее. да и нормальных примеров реализации не могу найти, вот если бы были попытался бы разобраться. уже какой день думаю, и никак ![]() ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 8 Всего: 154 |
ты можешь написать нормально, просто описать проблемму?
тут хватает людей которые могут твою проблемму решить, но тратить полчаса-час времени на это не каждыйникто не может себе позволить нужно что-то вроде этого
далее должен идти твой вопрос о том, как этот код нужно изменить что бы получить то или иное поведение если ты не можешь внятно сформулировать вопрос, то ответа ты скорее всего не получишь |
|||
|
||||
2faust |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
область локализции проблемы - след ф-ция
проблемная область
полсе i-того попадания в условие else{} выхожу из цикла. как я понимаю Sleep(20) необходимо для операции ввода-вывода, в противном случае надобность в цикле while() нету. как бы сделать так, чтобы я выходил при выполнении след. условия :
incr - является переменая цикла у меня недостаточно опыта, чтобы я мог обьяснить праграммную проблему на язык понтный толковым программистам, вот поэтому и спользую только код из программы. буду очень благодарен в помощи. |
||||||
|
|||||||
kolobok0 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 24.12.2008 Репутация: нет Всего: 2 |
1) читать альма матер по многопоточности и вообще по Win32: "WINDOWS для проффессионалов" Рихтера 2) юзать правильные функции для порождения многопоточности. 3) правильно пользоваться многопоточностью. Хотя бы ответить на вопрос себе - если Вам пофигу результат запуска потока, нафига его запускать? 4) почитать там же про системные объекты синхронизации. 5) правильно продумать архитектуру передачи-выемки в(из) потока данных. 6) Не юзать слиип для переключения потоков и "промывания железа" - это в вытесняющих средах изьян архитектуры а не удачное решение... удачи Вам (круглый) |
|||
|
||||
2faust |
|
||||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 14.12.2005 Репутация: нет Всего: нет |
всем привет.
ох как мне тяжело дались эти реализации с тредами и всеми от сюдя вытекающими последствиями. но всетаки я это сделал, ![]() ![]() ![]() жалко конечно что нету возможности по месту общаться с толковым человеком, тогда процес шел бы намного быстрее. не все можно обьяснить на бумаги, если нет толковой практики в этом деле.
вопрос можно считать закрытым. все спасибо и удачи. ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |