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

Вниз

Как узнать выполняется моя функция в основной нитке...   Найти похожие ветки 

 
Jolik ©   (2008-03-13 02:03) [0]

Как узнать выполняется моя функция в основной нитке программы или нет?

Заранее благодарен!


 
Германн ©   (2008-03-13 03:10) [1]


> Jolik ©   (13.03.08 02:03)
>
> Как узнать выполняется моя функция в основной нитке программы
> или нет?
>
>

А на фига?


 
Jolik ©   (2008-03-13 03:21) [2]

Ну чтобы проконтролировать программеров, которые будут вызывать мои функции. При написании их я руководствовался тем, что они будут вызываться из оснвной нитки (например - вызов VCL из порожденной нитки чреват крахом)


 
Сергей М. ©   (2008-03-13 08:18) [3]

В простейшем случае так:

if GetCurrentThreadId <> MainThreadId then "или нет"


 
Сергей М. ©   (2008-03-13 08:20) [4]

Но на то он и случай, что не обязан быть закономерностью)


 
Jolik ©   (2008-03-13 12:55) [5]

Ок.
Спасибо!


 
Jolik ©   (2008-03-13 12:58) [6]

А че может и не совпасть условие GetCurrentThreadId = MainThreadId  в основной нитке?


 
Сергей М. ©   (2008-03-13 13:08) [7]

Да, при определенных условиях может и не совпасть


 
Jolik ©   (2008-03-13 13:49) [8]

А можно поточнее - при каких. может можно про это почитать где?


 
slow!alfamoon!com   (2008-03-13 13:59) [9]

Ну.... Напиши в документации об этом.


 
Сергей М. ©   (2008-03-13 14:09) [10]


> при каких


Например, при загрузке библиотеки, в которой реализована твоя функция, в любом потоке, отличном от основного.


 
Leonid Troyanovsky ©   (2008-03-13 14:46) [11]


> Jolik ©   (13.03.08 03:21) [2]

> Ну чтобы проконтролировать программеров, которые будут вызывать
> мои функции.

А что за функции?
Может лучше создать объект с требуемыми методами.
В оном можно сделать и так, чтобы его методы выполнялись,
скажем, только в гуевом потоке.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-03-13 15:05) [12]


> Сергей М. ©   (13.03.08 14:09) [10]

> Например, при загрузке библиотеки, в которой реализована
> твоя функция, в любом потоке, отличном от основного.

Чего не хватает до полной нирваны функциям, интимно
общающимся с VCL и не дружащими с потоками.
Только попадания в dll :)

--
Regards, LVT.


 
Сергей М. ©   (2008-03-13 15:17) [13]


> Leonid Troyanovsky ©   (13.03.08 15:05) [12]


А что ?
И такое ведь не исключено)
И, как ни вертись, а засаду [10] при этом не миновать)
Ну разве что только переделкой "генофонда")


 
Leonid Troyanovsky ©   (2008-03-13 15:25) [14]


> Сергей М. ©   (13.03.08 15:17) [13]

> И такое ведь не исключено)

Чур меня, тьфу-тьфу.. с++

Ужасы рассказываешь, теперь не засну :)

--
Regards, LVT.


 
Jolik ©   (2008-03-13 15:26) [15]

Черти, совсем запутали меня ...

Я сделал так:

   ///  проверяем  - главная ли нитка вызывает функцию
   if GetCurrentThreadId <> MainThreadId then
     raise Exception.Create("Нельзя вызывать функцию в порожденном потоке!");


Всегда ли это будет работать?
Или если какой программист вызовет в порожденном потоке функцию  у нее окажется GetCurrentThreadId = MainThreadId и все рухнет.
или наиборот - возможна ли ситуация, что вызывают легитимно а у нитки GetCurrentThreadId <> MainThreadId ?


 
Leonid Troyanovsky ©   (2008-03-13 15:34) [16]


> Jolik ©   (13.03.08 15:26) [15]

> Черти, совсем запутали меня ...

Поклянись, что это у тебя не в длл.

>      raise Exception.Create("Нельзя вызывать функцию в порожденном
> потоке!");


Уверен, что подконтрольные программисты правильно
обрабатывают исключения?
А то они и прочесть ничего не смогут.

--
Regards, LVT.


 
Сергей М. ©   (2008-03-13 15:38) [17]


> Всегда ли это будет работать?


Ожидаемым тобой образом - нет, не всегда.


> если какой программист вызовет в порожденном потоке функцию
>  у нее окажется GetCurrentThreadId = MainThreadId и все
> рухнет.


Запросто.
VCL вообще само по себе хрупкое и нежное создание)


> возможна ли ситуация, что вызывают легитимно а у нитки GetCurrentThreadId
> <> MainThreadId ?


Легитимно, в смысле, именно в основном потоке и никак не иначе ?
Нет, такая ситуация исключена, если конечно же к этому не приложить очумелые ручки)



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

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

Наверх





Память: 0.48 MB
Время: 0.008 c
2-1231168615
Цукор5
2009-01-05 18:16
2009.02.15
StringReplace


15-1229929438
Slider007
2008-12-22 10:03
2009.02.15
С днем рождения ! 20 декабря 2008 суббота


2-1231250146
Семён
2009-01-06 16:55
2009.02.15
Как изменить содержимое 2-й строки ListView без Clear?


2-1231410906
EastGod
2009-01-08 13:35
2009.02.15
Альтернативные потоки файлов


15-1220080247
xayam
2008-08-30 11:10
2009.02.15
Помогите исправить багу в скрипте поисковика





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