Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Tthread и с чем его едят?


Страницы:   1 2 3

malefik ©   (2006-11-08 10:28:00) 

Добрый времени суток!
несложный вопрос....
допустим обьявлен класс унаследованный от tthread. в секции public обьявлено поле типа int.

в приложении при создании формы создается обьект....этого класса....

TMyThread * thread = new TMyThread(false);
могу я после этого обратится к полю...

например
thread->имя_поля

или всю работы всегда проводить через
Synchronize???


Ketmar   (2006-11-09 12:50:00) [1]

>[43] Anatoly Podgoretsky(c) 9-Nov-2006, 12:10
>Отвечать надо?
нет, риторический.

>Кстати а ты уверен?
на моём pIII это именно так. может, новая память адресуется как-то по другому, но что-то я сильно сомневаюсь.


Anatoly Podgoretsky   (2006-11-09 12:10:00) [2]

> Ketmar  (09.11.2006 12:03:41)  [41]

Отвечать надо? С одной стороны вроде риторический вопрос, с другой стороны в конце стоит знак вопроса.
Кстати а ты уверен?


evvcom   (2006-11-09 12:07:00) [3]

> [38] Percent   (08.11.06 22:19)
> Про "задания", "очередь", "флаги", "отчет о выполнении",
> "защиту от изменения чтения/записи" и их влияние на многопоточность
> - пожалуйста, если можно, подробнее. Особенно - про "защиту
> от изменения" и "отчет о выполнении"...

Спроси у Рихтера, он знает. Выкладывать сюда полкниги я не собираюсь.


Ketmar   (2006-11-09 12:03:00) [4]

>[38] Percent 8-Nov-2006, 22:19
>процессора. Поток не может быть приостановлен "где-то в
>процессе" выполнения такой команды.
ты упоминал многопроцессорные системы. там ничего не "приостанавливается". а одновременные обращения всё равно бывают. загадка?

зыж как ты думаешь, отчего aligned-данные выбираются быстрее?


Anatoly Podgoretsky   (2006-11-09 08:59:00) [5]

Конечно не просто так, его придумали для 8086, начиная с 80486 неактуален.


Сергей М.   (2006-11-09 08:17:00) [6]


> Percent


Как думаешь, зачем в Intel придумали префикс lock ?
От нефига делать, надо понимать ?)


Percent   (2006-11-08 22:19:00) [7]

Доступ на чтение? Запись? Чтение и запись? Если просто почитать и больше ничего не делать, то да. А если..., то нет.

Как все многозначительно и загадочно... :-)
На самом деле, никакой разницы.
Потокобезопасно и все (в отношении 32-разрядных целых).

если integer поравняли, конечно.

Куда поравняли? К 32-бит-кратной границе? Не имеет значения. Операции перемещения память-регистр и регистр-память с 32-битными операндами выполняются одной командой процессора. Поток не может быть приостановлен "где-то в процессе" выполнения такой команды. Хотя бы потому, что состояние регистров при такой остановке окажется неопределенным. А при остановке потока поизводится сохранение состояния регистров. Что сохранять, если состояние неопределенное?

Другой поток, освобождаясь, начинает перебирать "задания", читая значения. Увидев задание в очереди, он пишет флаг, что он взялся за это задание, потом, вероятно пишет, что он его выполнил. Так вот эти чтение/запись должны быть защищены от изменения.

Про "задания", "очередь", "флаги", "отчет о выполнении", "защиту от изменения чтения/записи" и их влияние на многопоточность - пожалуйста, если можно, подробнее. Особенно - про "защиту от изменения" и "отчет о выполнении"...


evvcom   (2006-11-08 19:10:00) [8]

> [36] malefik   (08.11.06 18:59)

Не может быть просто на запись. Скорее всего не может быть даже просто на чтение. Прежде, чем что-то писать, ты все равно сначала читаешь значение и его анализируешь, и если удовлетворяет каким-то условиям, пишешь новое значение. Другой поток, освобождаясь, начинает перебирать "задания", читая значения. Увидев задание в очереди, он пишет флаг, что он взялся за это задание, потом, вероятно пишет, что он его выполнил. Так вот эти чтение/запись должны быть защищены от изменения.


malefik   (2006-11-08 18:59:00) [9]


> Доступ на чтение? Запись?

на запись ....из основной нити даю команды другой на работу с сетью....


malefik   (2006-11-08 18:57:00) [10]

не правильно сформулировал, сорри.....
Вобщем так, ClientSocket находится в основной нити приложения......и в его обработчике события OnConnect создаем нить .......куда передаем указатель       TCustomWinSocket* _socket; .....в самой нитке создается обьект класса  ТWinSocketStream * _stream; ....который и имеет собственно метод WaitForData....
Короче это работает сейчас у меня .....основное приложение не тормозит.....но хотелось бы узнать ......правильно это или нет.....


evvcom   (2006-11-08 17:34:00) [11]

> [32] Percent   (08.11.06 17:08)
> Доступ к значению для переменных типа integer - атомарная

Доступ на чтение? Запись? Чтение и запись? Если просто почитать и больше ничего не делать, то да. А если..., то нет.


Ketmar   (2006-11-08 17:10:00) [12]

>[32] Percent 8-Nov-2006, 17:08
>Доступ к значению для переменных типа integer - атомарная,
если integer поравняли, конечно.


Percent   (2006-11-08 17:08:00) [13]

[17] Сергей М. ©   (08.11.06 13:00)

> Percent   (08.11.06 10:57) [10]
> Любая операция с этим типом данных проходит, в максимуме,
>  за один такт процессора, поэтому этот тип данных - потокобезопасный.

В мультипроцессорных системах и с учетом DMA не стоит на это полагаться.


Доступ к значению для переменных типа integer - атомарная, а посему - потокобезопасная операция.
Все остальное не имеет никакого значения.
Хоть в мультипроцессорной системе, хоть с учетом DMA, хоть в другой звездной системе...


Сергей М.   (2006-11-08 16:10:00) [14]


> а то что клиент сокет находится в основной нити приложения
> это как???
>


Это никак. По кр.мере пока не объяснишь. что есть "клиент сокет находится в основной нити приложения"


malefik   (2006-11-08 15:39:00) [15]

хорошо...прошу прощения за код......опустим его.....вопрос остался....
а то что клиент сокет находится в основной нити приложения это как???

ЗЫ VCL она и в африке VCL


Ketmar   (2006-11-08 15:38:00) [16]

>[26] malefik 8-Nov-2006, 15:31
>билдер ...какая собсно разница
а я сейчас приведу код на ALISP. и тоже буду утверждать, что разницы нет.


Anatoly Podgoretsky   (2006-11-08 15:34:00) [17]

Предупреждение: код на СИ обсуждаем в Прочее


Anatoly Podgoretsky   (2006-11-08 15:34:00) [18]

Раз разницы нет, то приведи и оттрасируй код на Дельфи.


malefik   (2006-11-08 15:31:00) [19]

билдер ...какая собсно разница .....написание кадо другое ...суть одна...


Ketmar   (2006-11-08 15:31:00) [20]

>[22] malefik 8-Nov-2006, 15:26
>пример....поплюйтесь......
плююсь: dcc32.exe это скомпилировать не смог.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо