Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.015 c
14-83722
Rain
2003-05-06 18:00
2003.05.26
IP


4-83805
mikeevteev
2003-02-17 21:07
2003.05.26
Как создать большой хинт для tray icon?


3-83369
RDA
2003-05-04 17:20
2003.05.26
Глюки в цыкле с таблицей


3-83384
P.Kert
2003-05-06 12:50
2003.05.26
BLOB-обьекты в InterBase6.x


4-83793
Шоломицкий
2003-03-07 18:53
2003.05.26
Переименование у адление каталога. Запрет!




   Наверх