IPB
ЛогинПароль:

> Потоки... Потоки? Потоки!, FPC
Archon
сообщение 27.06.2009 21:13
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Сел переписывать движок Doomed Game под потоки и... понял, что мои знания о потокобезопасности оставляют желать лучшего. Может быть кто-нибудь (volvo?) проведет несколько лекций на эту тему? Думаю, это не только меня может заинтересовать. Или может я просто задам свои вопросы?


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 28.06.2009 8:36
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Обезопасил модуль u_log.pas. Теперь думаю над u_window.pas. Предпологается использовать этот объект только в одном потоке (в модуле u_graphics.pas), но WinProc - это же отдельный поток, верно? Значит вот так делать нельзя:
function TD3DWindow.MessageProc(Msg: UINT; WParam: WPARAM; LParam: LPARAM): LResult;
begin
case Msg of
WM_DESTROY: begin
PostQuitMessage(0);
end;
WM_SYSCOMMAND: begin
if (WParam = SC_SCREENSAVE) or (WParam = SC_MONITORPOWER) then
Result := 0
else
Result := DefWindowProc(WinHandle, Msg, WParam, LParam);
end;
WM_SYSKEYUP: begin
if WParam = VK_RETURN then SetFullscreenMode(D3DPP.Windowed) { <- Тут прозреваю небезопасный вызов метода. }
else if Char(WParam) = '1' then SetMode('800x600x32') { <- И тут. }
else if Char(WParam) = '2' then SetMode('1024x768x32') { <- И тут. }
else if Char(WParam) = '3' then SetMode('1280x1024x32'); { <- И тут. }
end;
else
Result := DefWindowProc(WinHandle, Msg, WParam, LParam);
end;
end;
Думаю, от этого вобще лучше избавиться и ловить клавиши исключительно в модуле u_controls.pas (его пока нет, но будет smile.gif)

Сообщение отредактировано: Archon - 28.06.2009 8:37


Прикрепленные файлы
Прикрепленный файл  u_log.pas ( 2.73 килобайт ) Кол-во скачиваний: 801
Прикрепленный файл  u_window.pas ( 11.97 килобайт ) Кол-во скачиваний: 964


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Archon   Потоки... Потоки? Потоки!   27.06.2009 21:13
volvo   Название темы - :good: Нет, пока лекций на тему...   27.06.2009 21:20
Archon   Окей. Тогда рассмотрим пример. Мое приложение сост...   27.06.2009 21:49
volvo   Какие методы планируется вызывать из разных потоко...   27.06.2009 22:16
Archon   В общем случае не все. Но кто его знает, как потом...   27.06.2009 22:29
volvo   Вот !!! Все, что нужно, ты уже сказал....   27.06.2009 22:37
Archon   А неделимость чтения кто гарантировать будет? Вдру...   27.06.2009 22:45
volvo   Тогда, естественно, придется пользоваться другими ...   27.06.2009 23:25
Archon   Я не знаю процедур :). Можно, конечно, WinApi, но ...   27.06.2009 23:39
Archon   Кстати да, CriticalSection тут будет проще :).unit...   28.06.2009 6:20
Archon   Обезопасил модуль u_log.pas. Теперь думаю над u_wi...   28.06.2009 8:36
volvo   А чего его проверять, вроде выглядит нормально, на...   28.06.2009 8:57
Archon   А какие существуют методы тестирования на потокобе...   28.06.2009 9:03
Archon   Продолжаю исправлять классы. Работу с текстурами я...   28.06.2009 9:43
volvo   Что-то не так... Смотри: uses sysutils, classes, ...   28.06.2009 10:06
Archon   Странно, я у себя в том же тесте таких ужасов не н...   28.06.2009 10:54
volvo   Угу, тут прямо шалит, а если сделать: unit u_test;...   28.06.2009 11:29
Archon   А в чем разница? Разве что в TMultiReadExclusiveWr...   28.06.2009 11:44
volvo   Кто сказал?   28.06.2009 11:51
Archon   Цитата из того же файла версии 2.1 за август 2006....   28.06.2009 12:47
volvo   Так... Меняем стратегию... Модуль: Тестовая прогр...   28.06.2009 13:27
Archon   Долго не отвечал, потому что устраивался на летнюю...   2.07.2009 18:12
volvo   Кури этот код, это рекомендация Рихтера, а он плох...   2.07.2009 20:20


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.09.2025 2:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"