Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
3-1087372749
vr!
2004-06-16 11:59
2004.07.11
Проблема с открытием большого DBF файла тз Делфи


1-1087971630
BorisMor
2004-06-23 10:20
2004.07.11
XML парсер


14-1087900856
Piter
2004-06-22 14:40
2004.07.11
Создание Child окно в MDI приложении


9-1080247371
olegl
2004-03-25 23:42
2004.07.11
Ошибка OpenGL и Delphi7


6-1084492318
Andrei82
2004-05-14 03:51
2004.07.11
Работа с HTML в Delphi