Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
ВнизПотоки, Сообщения, Семафоры Найти похожие ветки
← →
HolACost! (2003-09-23 17:43) [0]Вопрос возни из неоткуда: вчера начал делать курсач и хотелось сделать логер, который записывал бы какие действия совершает юзер с моей прогой и попытался реализовать это дело через поток - схема такая (что хотелось, но не получилось):
- создать поток логирования
- при необходимости посылать сообщения ему типа логируй событие.
- он при необходимости (из-за несинхронной работы с удалённой БД) создаёт стек и потом его пишет в базу.
Проблема:
Часть записи я реализовал через семафоры в Execute, но похоже поток не востринимает сообщения когда от сидит на WaitForSignalObject! (это ценную инфу я подчеркнул из хелпа - или я не прав). Т.е. Я в Execute делаю ощидание установления семафора в сигнальное состояние и он ставиться в него при посылке МОЕГО сообщения.
Как можно ещё реализовать эту фичу? Или как поток заставить овечать на сообщения. Оговорюсь: Фича нужна не для рельного дела, а для увеличения размеров проекта - я думаю знаете как преподы любят ставить ограничения! И это хотелось бы сделать в отдельном потоке - цикл активного ожидания не подойдёт!
Всё предложения приветствуются и не отвергаются!
← →
Palladin (2003-09-23 19:01) [1]гы... сколько размера уже есть и сколько еще надо?
ну а поповоду сообщений и потоков, правильно, как он может получить его, если он сидит на WaitFor... PeekMessage не выполняется... хоть очередь сообщений и пополнятеся, если она вообще есть...
используй waitable timers...
если дочертиков кода надо, то можешь использовать обычный таймер (или опять же waitable, да лучше waitable) во втором потоке и критические секции...
тоесть этот второй поток зашел в секцию, пока таймер у него не отработал, в ней сидит... а первый ждет этой секции, входит в нее, пишет в базу, выходит...
хотя конечно Sleep :) это не для нас...
← →
Palladin (2003-09-23 19:09) [2]опа... что то я забыл... тебе же еще в первом потоке сообщения обрабатывать надо... пусть сообщения обрабатывает второй поток который с таймером и пусть он же и хранит эту очередь сообщений... потом по WM_TIMER (тогда уже лучше работать не с waitable а с обычным), передает указатель второму потоку в сообщении и второй уже сбрасывает, после становясь опять в режим ожидания сообщения, тогда критическая секция тебе не нужна...
← →
mrcat (2003-09-23 19:09) [3]waitabl-ы только в NT-системах.
← →
panov (2003-09-23 19:17) [4]Ведение протокола в отдельном потоке можно реализовать без использования сообщений.
← →
Palladin (2003-09-23 19:20) [5]можно конечно, но ему надо кода кода больше кода...
← →
HolACost! (2003-09-24 08:07) [6]>> Palladin
Не только кода =- а скорее функциональность через интересное место! Гым!
Тут я бы даже сказал, что есть у меня только одна идея - это создать это поток и потом просто метода кидать в него инфу, но что-то мне это не нравится - но похоже так придётся!
Всем Мерси!
← →
Palladin (2003-09-24 09:41) [7]что то смутно у тебя все... от предложеного увеличения кода функциональность не теряется, и приобретается модульность, один поток отвечает за буффер, другой за сброс буфера...
← →
HolACost! (2003-09-24 09:51) [8]Смутно! Это я уже понял! Насчёт второго потока - я щас уже это делаю! интересно получается!
Впринципе - тут можно и оставить только один поток - сброс буфера - вроде как добавление в буфер будет весьма синхронно происходить!
Я имел ввиду, что надо не кодом,а функциональностью расшиприть проект! И сделать что-то идеотически интересное! Мда!
Хочу побаламутить этот движок - может что и выйдет!
← →
Palladin (2003-09-24 10:14) [9]функционально...
можешь добавить уровень сообщения в журнал, скажем 5 уровней срочности или важности
можешь добавть категорию сообщения...
предупреждение, ошибка, извещение...
← →
HolACost! (2003-09-24 10:31) [10]>> Palladin
10x!
Делаю! В принципе уже сдалал! но надо ещё буфер организовать покрасивее!
← →
Palladin (2003-09-24 11:02) [11]ну и напоследок снабди свой журнал древовидностью...
для наглядности...
OpenSection
CloseSection
при вывроде красиво получается, прямо как в фильмах...
← →
panov (2003-09-24 11:06) [12]>HolACost!
Если есть желание посмотреть реализованный - ссылка у меня в инфе.
Правда причесано для использования в DLL.
← →
HolACost! (2003-09-24 11:10) [13]>> panov
10x!
← →
Verg (2003-09-24 11:13) [14]
> но похоже поток не востринимает сообщения когда от сидит
> на WaitForSignalObject!
Я дико извиняюсь, но откуда это: WaitForSignalObject?
Может все же Single, а не Signal....
Правильно, а чего бы ему воспринимать сообщения...
Ведь для этого есть другая функция:
MsgWaitForMultipleObjects
← →
Verg (2003-09-24 11:13) [15]
> но похоже поток не востринимает сообщения когда от сидит
> на WaitForSignalObject!
Я дико извиняюсь, но откуда это: WaitForSignalObject?
Может все же Single, а не Signal....
Правильно, а чего бы ему воспринимать сообщения...
Ведь для этого есть другая функция:
MsgWaitForMultipleObjects
← →
HolACost! (2003-09-24 11:18) [16]>> Я дико извиняюсь, но откуда это: WaitForSignalObject?
>> Может все же Single, а не Signal....
Это действительно дельное замечание - я просто расплачусь от такой своей тупости!
Во-вторых, вопрос уже решен! Это уже не надо! - поток я юзал немного не в том качестве!
Ты фишку не прогнал!
← →
Verg (2003-09-24 11:21) [17]
> Ты фишку не прогнал!
Ну, извини тогда. Ты - спросил, я - ответил. Как уж мог.
P.S.
Фишек не гоняю, я - программист (сегодня с насморком).
← →
HolACost! (2003-09-24 11:24) [18]Насморк вообще на мозги не влияет - хотя у кого как! :)))
>> Ну, извини тогда. Ты - спросил, я - ответил. Как уж мог.
Да просто уже ответили! Ежу понятно. что будет ошибка!
← →
Verg (2003-09-24 11:28) [19]
> Насморк вообще на мозги не влияет - хотя у кого как! :)))
А средства от.....?
> Ежу понятно. что будет ошибка!
Значит я - не еж :(
← →
HolACost! (2003-09-24 11:31) [20];)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c