Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

Thread   Найти похожие ветки 

 
GanibalLector ©   (2004-11-18 02:58) [0]

Откроем пример в Demos\Thread.Есть такие строка :
...
 Synchronize(DoVisualSwap);
...


А как эта строка будет выглядеть,если я создаю поток таким образом :
function potok(Param: Pointer): DWord; stdcall;
begin
...
Result:=0;exitthread(Result);
end;

CreateThread(nil,0,@potok,nil,0,ThreadID);


 
GanibalLector ©   (2004-11-18 03:03) [1]

Если ходить по F7,то сразу вываливаюсь. Тут6

procedure TThread.Synchronize(Method: TThreadMethod);
begin
 FSynchronizeException := nil;
 FMethod := Method;
SendMessage(ThreadWindow, CM_EXECPROC, 0, Longint(Self));
 if Assigned(FSynchronizeException) then raise FSynchronizeException;
end;


 
GanibalLector ©   (2004-11-18 03:10) [2]

У меня есть вариант отсылать сообщение основному потоку,а там,по приходу оного что-нибудь творить с VCL-контролами.Но интересно,а как же это делает Synchronize?


 
Evgeny V ©   (2004-11-18 07:33) [3]

А посмотри исходники classes.pas Кстати в дельфи 5 и 6 это реализовано по разному.


 
Digitman ©   (2004-11-18 08:24) [4]


> Если ходить по F7,то сразу вываливаюсь


что значит "вываливаешься" ?


 
GanibalLector ©   (2004-11-18 09:38) [5]

>что значит "вываливаешься" ?
D5 вываливается.Что-то типа : not responding

Ну а в теории.Угадал ли я? См [5]


 
Digitman ©   (2004-11-18 09:48) [6]


> GanibalLector ©   (18.11.04 09:38) [5]


> D5 вываливается.Что-то типа : not responding


что-то я не понимаю, что там у тебя "вываливаться" может, если ты трассируешь заведомо корректный штатный код метода Synchronize


> Ну а в теории.Угадал ли я?


в смысле [2] ?

ну да, в Д5 именно так это и делается.
только сообщение CM_EXEC посылается не осн.трэду, а тому трэду, который впервые вызвал конструктор TThread и создал при этом окно, которому будут адресоваться CM_EXEC-сообщения .. а это вполне м.б. и любой иной трэд, нежели основной .. так что синхронизация с осн.трэдом будет работать правильно лишь в том случае, если самый первый экз-р TThread был создан именно осн.трэдом, а не каким-то иным


 
panov ©   (2004-11-18 10:01) [7]

Непонятно, все-таки, что тебе надо.

Если тебе надо синхронизировать поток, созданный CreateThread или BeginThread, то Synchronize тут ни при чем.

Если ты хочешь реализацию по аналоги с TThread.Synchronize, то вариант с посылкой сообщения мне кажется наиболее подходящим.


const WM_MyThreadSync=WM_USER+xxx;

...

SendMessage(
 <Здесь дескриптор окна, в котором должно обработаться сообщение>,
 WM_MyThreadSync,  //Номер сообщения
 0,
 Longint(@MyProc)  //Адрес процедуры для выполнения
         );


При обработке:


var
 Proc: TProcedure;
case Msg.Message of
 Msg.Message=WM_MyThreadSync:
    begin
      @Proc := Pointer(Msg.lParam);
      if Assigned(Proc) then Proc;
    end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.032 c
4-1100201018
Norny
2004-11-11 22:23
2005.01.02
Считывание значения патенциометра


14-1102260533
Урфин Джюс
2004-12-05 18:28
2005.01.02
Подводим итоги года: 2004


1-1102770894
Kolan
2004-12-11 16:14
2005.01.02
Помогитес двоичным числом разобраться


1-1102925519
Алексей Петухов
2004-12-13 11:11
2005.01.02
определить координаты текста WMF


1-1103125417
Чайник
2004-12-15 18:43
2005.01.02
Как создать объект по имени его класса





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