Текущий архив: 2003.05.26;
Скачать: CL | DM;
Вниз
MessageDlg в дополнительном потоке Найти похожие ветки
← →
Bel © (2003-05-14 17:17) [0]Мастера, разъясните ситуацию, плиз.
Одной из частей моей проги является почтовый робот. Я его сделал в дополнительном потоке. Там могут выскакивать всякие сообщения для пользователя. Эти сообщения вызываются в контексте дополнительного потока. На моём компе (Win98) всё нормально. А на другом (Win2000 или XP) выдаёт "неправильный дескриптор окна". Попробовал одно сообщение сделать в контексте основного потока (через Syncronize), прошло нормально. Получается, что в NT-системах сообщения надо выводить в контексте основного потока? Или я что-то не так понял? Может, как-то это можно обойти, а то неохота на каждый MessageDlg писать свою процедуру (у всех разные кнопки, значки).
← →
Reindeer Moss Eater (2003-05-14 17:22) [1]Это касается любой ОС. Только основной поток.
← →
Serginio (2003-05-14 17:25) [2]Вообще при работе с потоками для разного рода "сообщения для пользователя" лучше работать через PostMessage когда приложение сочтет нужным обработать очередь сообщений.
← →
Bel © (2003-05-14 17:27) [3]А почему же тогда 98-й не ругался?
← →
Bel © (2003-05-14 17:33) [4]> Serginio (14.05.03 17:25)
По-моему это не совсем то. Мне же нужны информационные сообщения для пользователя, а PostMessage посылает системные сообщения окнам. Юзер должен прочитать сообщение, нажать кнопку, и программа после этого может дальше идти.
← →
vuk © (2003-05-14 17:34) [5]to Bel:
Используйте MessageBox из WinAPI.
to Reindeer Moss Eater:
>Это касается любой ОС. Только основной поток.
ОС ни при чем. Это проблемы VCL.
← →
Reindeer Moss Eater (2003-05-14 17:35) [6]А почему же тогда 98-й не ругался?
Случайное стечение обстоятельств.
← →
Reindeer Moss Eater (2003-05-14 17:38) [7]ОС ни при чем. Это проблемы VCL.
Очень даже при чем.
← →
Bel © (2003-05-14 17:39) [8]> vuk © (14.05.03 17:34)
> Используйте MessageBox из WinAPI.
А он не страдает такой проблемой? Хорошо, попробую. Это даже лучше, он надписи на кнопках пишет по русски.
← →
vuk © (2003-05-14 17:45) [9]to Reindeer Moss Eater:
>Очень даже при чем.
Повторяю еще раз. Проблема в VCL и только в VCL. Окна в отдельных потока живут со страшной силой.
to Bel:
>А он не страдает такой проблемой?
Не страдает.
>Это даже лучше, он надписи на кнопках пишет по русски.
Вот-вот. :o)
← →
Reindeer Moss Eater (2003-05-14 17:46) [10]vuk ©
Кроме того:
Читаем внимательно. У чела одна программа и разные ос.
Я ему сказал, что основной поток надо использовать (в этой его программа) в любой ОС.
И повторяю сказанное. Даже если это проблема VCL.
← →
vuk © (2003-05-14 18:02) [11]MessageBox работает в любом потоке (т.к. не VCL-ный).
← →
vuk © (2003-05-14 18:06) [12]Про предыдущее сообщение.
Это я в смысле, что проверил и подтверждаю, что работает. :o)
← →
Bel © (2003-05-15 10:33) [13]> vuk ©
Большое спасибо, получилось через Application.MessageBox (он всё равно вызывает апишный MessageBox).
Вот только в одном месте всё равно придётся использовать MessageDlg через Syncronize, т.к. мне нужна кнопка YesToAll, а у MessageBox её нет.
← →
Alexander1966 © (2003-05-15 13:49) [14]Для корректной работы нескольких потоков с VCL ,
при создании потоков используй BeginThread.
Страницы: 1 вся ветка
Текущий архив: 2003.05.26;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c