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

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

Вопрос про многопоточность.


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

@!!ex ©   (2007-12-24 18:46:00) 

Чем грозит такая ситуация:
есть boolean массив.
есть дополнительный поток, который постоянно перебирается все элементы массива и меняет их значения.
Из основного потока периодически берутся значения массива.
Никакой синхронизации нет...


DiamondShark   (2007-12-24 19:46:00) [21]


> @!!ex ©   (24.12.07 19:40) [26]
> > [25] oxffff ©   (24.12.07 19:39)
>
> идей нет?

Просто он ещё не добрался до нужной страницы SDK ;)

А там написано вот что:

GetKeyboardState
An application can call this function to retrieve the current status of all the virtual keys. The status changes as a thread removes keyboard messages from its message queue. The status does not change as keyboard messages are posted to the thread's message queue, nor does it change as keyboard messages are posted to or retrieved from message queues of other threads. (Exception: Threads that are connected through AttachThreadInput share the same keyboard state.)


DiamondShark   (2007-12-24 19:44:00) [22]


> oxffff ©   (24.12.07 19:40) [27]
>
> > DiamondShark ©   (24.12.07 19:30) [19]
>
>
> Похоже ты завидуешь.

:))))))
Чему? Умению цитировать МСДН? С этим справится не слишком сложный бот, настроеный на ключевые слова.


oxffff   (2007-12-24 19:42:00) [23]


> @!!ex ©   (24.12.07 19:40) [26]


Идеи?
Повторяю я не телепат.
Ни точной постановки задачи,  ни твоей реализации нет.


@!!ex   (2007-12-24 19:40:00) [24]

> [25] oxffff ©   (24.12.07 19:39)

идей нет?


oxffff   (2007-12-24 19:40:00) [25]


> DiamondShark ©   (24.12.07 19:30) [19]


Похоже ты завидуешь.


oxffff   (2007-12-24 19:39:00) [26]


> @!!ex ©   (24.12.07 19:33) [22]


Я не телепат.


oxffff   (2007-12-24 19:36:00) [27]


> DiamondShark ©   (24.12.07 19:30) [19]


Я то все понял.
А ты пытаешь съехать сваливая на незначимость Shared Data.
А мои ответы конкретно касаются случая для многопроцессорных машин.

Рекомендую тебе заглянуть в SDK.
Там достаточно хороший пример.


trubin   (2007-12-24 19:34:00) [28]

To модератор:
на ветку пора замок вешать


@!!ex   (2007-12-24 19:33:00) [29]

Лучше расскажите, почему не работает?
 GetKeyboardState(NewKeys);
 for Index:=0 to 255 do
   if NewKeys[Index] shr 7 <> OldKeys[Index] shr 7 then
     Keys[Index]:=NewKeys[Index] shr 7 = 1;

 CopyMemory(@OldKeys[0],@NewKeys[0],256);


Вынес в обработку мультимедийного таймера.
TimerID:=timeSetEvent(16,0,@TimerProc,0,TIME_PERIODIC);

Keys всегда содержит false....


@!!ex   (2007-12-24 19:32:00) [30]

oxffff, DiamondShark - расслабьтесь.


oxffff   (2007-12-24 19:32:00) [31]


> DiamondShark ©   (24.12.07 19:26) [17]


Ну тем не менее я ответил на вопрос автора
Чем грозит такая ситуация
А ты вякяешь без доказательств.

P.S. А твои оскорбления говорят о том, что увы больше ты ничего не знаешь.


DiamondShark   (2007-12-24 19:30:00) [32]


> oxffff ©   (24.12.07 19:26) [16]

В контекст задачи ты тоже не въехал: в то, что элементы массива примитивного типа, в то, какой смысл имеют значения элементов массива.

Ты себе голову цитатами набил -- тебе достаточно.


oxffff   (2007-12-24 19:29:00) [33]


> DiamondShark ©   (24.12.07 19:26) [17]


Ну не беда. Меня поправили.
И ты даже не понял о чем говорил. Это печальнее. :)


DiamondShark   (2007-12-24 19:26:00) [34]


> oxffff ©   (24.12.07 19:16) [14]

Глупышка. Ты даже не въехал, какой массив совместно используется.


oxffff   (2007-12-24 19:26:00) [35]


> @!!ex ©   (24.12.07 19:20) [15]


O. :)

Ну разницы особой нет.
Основное, что это не инструкции с lock префиксом.


@!!ex   (2007-12-24 19:20:00) [36]

> [14] oxffff ©   (24.12.07 19:16)

Не. Общие данные - массив Keys.


oxffff   (2007-12-24 19:16:00) [37]


> DiamondShark ©   (24.12.07 19:13) [13]


Хавальничек свой прикрыл бы, дружок.
И прочитал бы внимательно сам.

Условия:  один поток пишет ( CopyMemory(@OldKeys[0],@NewKeys[0],256); )
             другой поток читает.


DiamondShark   (2007-12-24 19:13:00) [38]


> oxffff ©   (24.12.07 19:02) [8]
>
> > DiamondShark ©   (24.12.07 19:02) [5]
>
> Читай мат. часть.

Читай условия, попугайчик. А то память у тебя хорошая, а соображения -- ноль.


@!!ex   (2007-12-24 19:07:00) [39]

> [11] oxffff ©   (24.12.07 19:06)

Вобщем я понял. :)

К счастью, нашлось решение, которое убирает необходимость в двух потоках...
УРА! :)))


oxffff   (2007-12-24 19:06:00) [40]


> @!!ex ©   (24.12.07 19:04) [9]


Это грозит только некорретностью данных, которое может привести к AV. :)


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

Наверх

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