Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-18362
LinOS
2003-09-23 08:13
2003.10.06
Popup по click на кнопке


1-18418
Chlavik
2003-09-25 14:48
2003.10.06
DrawFocuseRect. А Как нарисовать просто линию такого стиля?


14-18564
MeF88
2003-09-18 19:42
2003.10.06
О именах и никах


3-18251
Denizzz
2003-09-17 14:28
2003.10.06
Скролл мышью в DBGrid


3-18238
rava
2003-09-16 10:39
2003.10.06
Помогите запросом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский