Главная страница
    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
1-1087550958
doma
2004-06-18 13:29
2004.07.11
Попытка создать Frame из Dll...


4-1085739046
stany
2004-05-28 14:10
2004.07.11
Сервис и GetUserName


10-1019029082
s_alexander
2002-04-17 11:37
2004.07.11
Как сделать соединение с сервером приложений из внешней сети?


8-1081016095
Forelli
2004-04-03 22:14
2004.07.11
Как проигрывать CDA файлы (AudioCD) в программе?


6-1083932647
SiDoff
2004-05-07 16:24
2004.07.11
Поможите с SMTP разобраться ....





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский