Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
ВнизThreads Найти похожие ветки
← →
P@vel (2004-06-28 01:45) [0]Вопросик такой. При трассировке программы, создающей новый поток выдаётся. Debuger fault notification "*.exe raised too many consecutive exeptions "breakpoint exeption at *******". Так должно быть или что-то не так ? Уж очень хочется делать отладку.
constructor TCore.Create;
begin
inherited Create;
Handle:= AllocateHWnd(WndProc);
TimerProcWND:= CreateThread(nil,0,@TCore.TimerThread,nil,CREATE_SUSPENDED,TimerThreadIdentifier);
SetThreadPriority(TimerProcWND,THREAD_PRIORITY_IDLE);
ResumeThread(TimerProcWND);
while GetMessage(Message,0,0,0) do
begin
DispatchMessage(Message);
end;
end;
← →
TUser © (2004-06-28 09:28) [1]А почему бы TThread не использовать?
← →
Digitman © (2004-06-28 09:49) [2]1. Ф-ция CreateThread() требует 3-м параметром адрес не метода объекта, а функции, которая должна иметь след.прототип :
TThreadFunc = function(Param: Pointer): Integer; stdcall;
2.
> while GetMessage(Message,0,0,0) do
> begin
> DispatchMessage(Message);
> end;
а это кому и зачем нужно ?
← →
P@vel (2004-06-28 14:04) [3]
while GetMessage(Message,0,0,0) do
begin
DispatchMessage(Message);
end
Это часть рпограммы. Поэтому я подумал, что может такие сообщения возникают именно из-за этого куска кода. Где Один из потоков остонавливается.
type
TCore = class(TObject)
......
private
function TimerThread(Parameter: Pointer): Integer; stdcall;
......
end;
implementation
function TCore.TimerThread(Parameter: Pointer): Integer;
begin
end;
> Digitman ©
Объясни пожалуйста в чём разница между функцией и методом обьекта(в конкретном случае). Используют то они 1 адресное пространство.
← →
Digitman © (2004-06-28 14:38) [4]
> P@vel (28.06.04 14:04) [3]
> в чём разница между функцией и методом обьекта(в конкретном
> случае).
ты ответь сначала на вопрос в [1]
у тебя ощутимый пробел в знаниях ООП и ObjectPascal как такового, и трэды (как "конкретный" пример) здесь вовсе ни при чем..
думаю, никаких серьезных аргументов в пользу отказа тобой от станд.класса, ОБЛЕГЧАЮЩЕГО программирование трэдов, у тебя не найдется .. если же иначе, то лучшим способом понять, как это делается, будет анализ кода класса TThread от самого Борланда - открываешь модуль classes.pas, ищешь реализацию метода TThread.Create() и внимательно изучаешь, что там и почему ... обо всем конкретно непонятом задаешь вопросы сюда, в форум, в порядке их возникновения
← →
Digitman © (2004-06-28 14:49) [5]
> P@vel
в идеологии win32 есть множество незыблемых постулатов, о которых ты, видимо, не имеешь представления
Наиболее важные из них для конкретно интересующей тебя темы :
1. В прикладной программе тело подпрограммы, будучи вызванной синхронно, всегда исполняется в контексте того же трэда, в котором выполняется вызывающая подпрограмма
2. Трэд, создавший окно, становится его "владельцем". После создания окна данный трэд имеет право на выборку и ответственен за выборку и обработку сообщений, посылаемых окну откуда-либо. Ни один другой трэд в общем случае не имеет доступа к сообщениям, адресованным окну, созданному данным трэдом.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c