Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Потоки, Сообщения, Семафоры   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.02 c
4-18670
Melcor
2003-07-29 18:02
2003.10.06
Время работы Windos


1-18334
BillyJeans
2003-09-23 16:43
2003.10.06
PageControl и ListView...


14-18592
другое имя
2003-09-18 12:55
2003.10.06
2McSimm про вопросы по ICQ e.t.c :)))))))


4-18666
Yurique
2003-07-31 14:41
2003.10.06
Является ли окно главным


1-18364
Fast
2003-09-22 03:57
2003.10.06
Как узнать разрушен ли объект или нет