Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.26;
Скачать: CL | DM;

Вниз

Как получить параметр который передается в нить   Найти похожие ветки 

 
Repeater   (2002-11-12 18:03) [0]

Короче такая трабла. Как видно из описания ф-ции CreateThread

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
DWORD dwStackSize, // initial thread stack size, in bytes
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to returned thread identifier
);


у нее есть параметр lpParameter. В MSDN написано, что это параметр передается в нить. Как его можно достать из функции нити?
А вообще мне недо просто передать функции нити какие то данные, что бы их там потои использовать.


 
Игорь Шевченко ©   (2002-11-12 18:15) [1]

lpStartAddress

The starting address of the new thread. This is typically the address of a function declared with the WINAPI calling convention that accepts a single 32-bit pointer as an argument and returns a 32-bit exit code. Its prototype is:

DWORD WINAPI ThreadFunc( LPVOID );

Вот и параметр появился... :-)


 
Repeater   (2002-11-12 19:05) [2]

Спасибо, работает. Я и сам примерно так пробовал, но что то не получалось. А теперь вроде все передается.

А еще такой вопрос. Есть ли в делфе (без VCL) такая штука. Мне надо, что бы нити, которые обращаются к одной глоб. переменной обращались к ней по очереди. То есть если одна из нитей работает с переменной, то другая останавливается и ждет пока она закончит.
Я знаю как это реализовать через ивенты, потому такие варианты не предлагай. Мне нужен именно встроенный механизм (как в сишнике), если он есть, конечно.


 
Repeater   (2002-11-12 19:25) [3]

И еще. Как можно нити узнать что ее закрывают? Тоесть я закрываю нить, но перед закрытием выполняется некая процедура.


 
Polevi ©   (2002-11-12 19:32) [4]

1. TCriticalSection
2. Если поток завершается корректно - он знает об этом, если нет - не знает :-)


 
Repeater   (2002-11-12 20:20) [5]

Ну хорошо. А как послать потоку какое либо уведомление что я его хочу закрыть? Сейчас я завел глоб. переменную и поток все время проверяет ее. Если True то закрывается. Но у меня много потоков и если я хочу закрывать их поотдельности то надо заводить для каждого из них переменную. А количество потоков у меня не фиксировано. В процессе работы запускаются новые и уничтожаются старые.


 
Evgeny V ©   (2002-11-13 06:06) [6]

Repeater>А как послать потоку какое либо уведомление что я его хочу закрыть?
Методов может быть много, зависит от того, что ты хочешь и как напишешь, например в TThread есть свойство Terminated и пример функции Execute (т.е периодически проверять переменную), но увязывая с предыдущей частью вопроса (я и сам так делаю), создаю event- ы, один например может сигналить о том что потоку надо продолжить работу, а другой о том что работу надо завершить(естественно каждому потоку по своему набору Event-ов).
Тогда используй функции SetEvent, WaitForMultipleObjects, ResetEvent. Конечно в этом случае лучше оформить работу с потоком как класс, а так как такой класс уже есть TThread, то можно создавать потомков от него.
А можно потоку слать различные messages- используй PostThreadMessage и соотвественно на выбор WaitMessage или PeekMessage



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

Текущий архив: 2002.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
3-85832
Анонимщик
2002-12-06 14:46
2002.12.26
Системные таблицы; Delphi6; Interbase


3-85809
Nikolai_S
2002-12-04 16:34
2002.12.26
Проблема с ADO в Windows XP!!!


3-85831
Fishka
2002-12-06 14:52
2002.12.26
DBCtrlGrid - добавление пустой записи?


7-86202
XHunter
2002-10-22 12:16
2002.12.26
Как определить открыт ли файл другой программой?


14-86151
delphist2
2002-12-06 13:32
2002.12.26
Ошибка в проге