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

Вниз

Создание копии потока   Найти похожие ветки 

 
ksa2002   (2006-08-11 11:17) [0]

Есть поток №1 и порт который он обслуживает
Если у нас 1 порт и 1 поток то всё нормально.
А ели 10 -20 портов? при этом они идентичны по событиям.
Не  писать же мне один и тот же поток (меняя только имена портов). Наверно можно создать копию потока и передать ему переменную? (только я не знаю как :) )


 
Сергей М. ©   (2006-08-11 11:18) [1]

Функция BeginThread() для сей цели имеет вх.параметр (см.справку)


 
ksa2002   (2006-08-11 12:21) [2]

почитал в хелпе и возник вопрос

BeginThread
(void * SecurityAttributes, unsigned StackSize, TThreadFunc ThreadFunc, void * Parameter, unsigned CreationFlags, unsigned &ThreadId);

т.е. идёт вызов  ThreadFunc находямщя в потоке, где  hreadId это ид потока который мы юзаем.
тобишь я вызово ф-ию она выполнится и всё ?? или она запустит поток с этого места  (этой-фии) передав параметр? (хотя написано BeginThread spawns a new thread of execution and sets the global IsMultiThread variable)

мне непонятен механизм запуска потока в данном случаи .


 
Сергей М. ©   (2006-08-11 12:29) [3]


> написано BeginThread spawns a new thread of execution


Как написано, так оно и есть - вызов BeginThread() порождает новый поток, в котором будет выполнена ф-ция, указанная параметром ThreadFunc.
Ф-ция ThreadFunc при этом сможет получить указанный параметр Parameter.

Попросту говоря, псевдокод

hThread1 = BeginThread(SomeThreadFunc, Param1)
hThread1 = BeginThread(SomeThreadFunc, Param2)

вызовет к жизни два независимых новых потока, выполняющих параллельно одну и ту же ф-цию, но с разными параметрами.


 
ksa2002   (2006-08-11 12:37) [4]

понятно
ещё вопрос если ф-я которую я вызвал, в свою очередь обращается к дургой  ф-и в данном потоке , это будет корректно вызванно ?

т.е. вызов Thread.Execute в которой вызываются другие ф-ии полностью будет работать непересеакаясь с другим потоком и нормально вызыватся?


 
Сергей М. ©   (2006-08-11 12:46) [5]


> если ф-я которую я вызвал, в свою очередь обращается к дургой
>  ф-и в данном потоке , это будет корректно вызванно ?


Да, конечно.

При этом следует понимать, что любая вызванная ф-ция выполняется в контексте того же потока, в котором выполняется вызывающая ф-ция.


> вызов Thread.Execute в которой вызываются другие ф-ии полностью
> будет работать непересеакаясь с другим потоком и нормально
> вызыватся?


Пересечение может быть только на уровне общих данных, если таковые имеются.


 
ksa2002   (2006-08-11 12:49) [6]

всё ) ...большое спасибо за помощь ) ..теперь я ещё немого поумнел )


 
GanibalLector ©   (2006-08-11 23:56) [7]

Вот,пример,кстати :

function Potok(Param: PMyMode): DWord;
begin
 ...
 with Param^ do
 begin
   //
 end;
 Dispose(Param);
end;

procedure TWait.Go;
 var ThreadID:DWord;
     Ph: PMyMode; // типа моя структура
begin
 New(Ph);
 Ph^.Port:=Port;
 Ph^.Baud:=Baud;
 Ph^.Mode:=Mode;
 Ph^.Handle:=Handle;
 CloseHandle(BeginThread(nil,0,@Potok,Ph,0,ThreadId));
end;



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

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

Наверх




Память: 0.46 MB
Время: 0.048 c
2-1164896435
Defort
2006-11-30 17:20
2006.12.17
Переполнение стека


2-1164634654
webpauk
2006-11-27 16:37
2006.12.17
Определить позицию в типе


15-1164439066
Shopot
2006-11-25 10:17
2006.12.17
2 операционки на 1 компе.


2-1164519166
APiC
2006-11-26 08:32
2006.12.17
CreateThread


2-1164868094
pavel_guzhanov
2006-11-30 09:28
2006.12.17
Работа с XML





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