Форум: "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