Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1087853882
Marser
2004-06-22 01:38
2004.07.11
Сегодня 22-е июня


14-1087935141
Undert
2004-06-23 00:12
2004.07.11
Мишку жалко ...


1-1087997302
XeLax
2004-06-23 17:28
2004.07.11
фокус и направление ввода


11-1075844882
Ciber SLasH
2004-02-04 00:48
2004.07.11
TKOLTabControl


1-1088109321
Destroyer
2004-06-25 00:35
2004.07.11
Иконка из файла на кнопке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский