Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с мьютексами 
V
    Опции темы
_Rin
Дата 18.9.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 12.9.2006

Репутация: нет
Всего: нет



Имеется следующая процедура потока (TThread):

Код

procedure TClientOnReceive.Execute;
var
 TempStream: TMemoryStream;
 TempStringList: TStringList;
begin
 while not Terminated do
 begin
  if ClientForm.TCPClient.Connected=false then
   Terminate
  else
  try

   TempStream:=TMemoryStream.Create;
   TempStringList:=TStringList.Create;

   ClientForm.TCPClient.ReadStream(TempStream);
   UnFormedStream(TempStream);
   TempStream.Position:=0;
   TempStringList.LoadFromStream(TempStream);

   TempStringList[1]:=TempStringList[0]+' : '+TempStringList[1];
   TempStringList.Delete(0);

   WaitForSingleObject(hMutex,INFINITE);
    ClientForm.Memo3.Lines.AddStrings(TempStringList);
    // Эта строка !!!
    SendMessage(ClientForm.Memo3.Handle,EM_LINESCROLL,0,ClientForm.Memo3.Lines.Count-1);
   ReleaseMutex(hMutex);

   TempStream.Free;
   TempStringList.Free;

   except
   end;
  end;
end;


Поток выводит данные в поле Memo3 и производит прокрутку до конца текста.

Надо ли защищать мьютексом строку:  SendMessage(ClientForm.Memo3.Handle,EM_LINESCROLL,0,ClientForm.Memo3.Lines.Count-1);


PM MAIL   Вверх
Romikgy
Дата 18.9.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



А Synchronize разве не лучший вариант?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_Rin
Дата 18.9.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 12.9.2006

Репутация: нет
Всего: нет



Надо именно мьютексами
PM MAIL   Вверх
Romikgy
Дата 18.9.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(_Rin @  18.9.2006,  07:29 Найти цитируемый пост)
 WaitForSingleObject(hMutex,INFINITE);
    ClientForm.Memo3.Lines.AddStrings(TempStringList);
    // Эта строка !!!
    SendMessage(ClientForm.Memo3.Handle,EM_LINESCROLL,0,ClientForm.Memo3.Lines.Count-1);
   ReleaseMutex(hMutex);

А что так не работает?
да и вообще то имхо надобно сначало занять мютекс перед ReleaseMutex
и еще можешь заюзать PostMessage имхо он более потоко независим


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_Rin
Дата 18.9.2006, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 12.9.2006

Репутация: нет
Всего: нет



Так все работает.
Мне надо знать, требуется ли вообще защищать SendMessage мьютексами.

PM MAIL   Вверх
Romikgy
Дата 18.9.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Имхо желательна , можно изменить на пост и там имхо можно будет и без нее, просто
Код

The SendMessage function sends the specified message to a window or windows. 
The function calls the window procedure for the specified window and does not return 
until the window procedure has processed the message. The PostMessage function, 
in contrast, posts a message to a thread's message queue and returns immediately.


Это сообщение отредактировал(а) Romikgy - 18.9.2006, 09:19


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 18.9.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Да и sendMessage тоже потокобезопасная. С ней нет ни каких проблем, кроме блокировки на ожидание ответа.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
_Rin
Дата 18.9.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 12.9.2006

Репутация: нет
Всего: нет



То есть в данном случае, лучше защитить SendMessage мьютексами.
(исходный код верен).

 smile  
PM MAIL   Вверх
Alexeis
Дата 18.9.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



[quote=_Rin, 18.9.2006,  11:20, post857954]То есть в данном случае, лучше защитить SendMessage м PostMessage, потому как с SendMessage + мьютекс есть шанс получить самоблокировку.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.