Текущий архив: 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.46 MB
Время: 0.006 c