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

Вниз

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

 
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 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.008 c
6-86064
Алексей Кононов
2002-10-31 09:27
2002.12.26
Как проверить корректность E-mail на Delphi


1-85925
Nimda
2002-12-17 11:05
2002.12.26
Ne ponal.


1-85942
Siduke
2002-12-17 15:08
2002.12.26
Выдвижные окна


14-86161
Uran
2002-12-06 16:53
2002.12.26
Откуда можно скачать программу DMFC, для чтения этого форума?


3-85816
Шурик Ш
2002-12-05 12:39
2002.12.26
Изменение типа поля





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