Здравствуйте, dcb-BanDos, Вы писали:
MG>>Да уж... Из серии "из пушки по воробьям"... Если речь о потоках — то либо связываем с контролом не CString, а CStatic, и непосредственно вызываем SetWindowText, либо вообще напрямую SetDlgItemTetx( IDC_..., );
DB>может ты не заметил, что это надо делать из другого потока
DB>имхо SendMessage в данном случае лучший вариант
Ну, вообще-то, я не тормоз, я медленный газ... И на подобные вещи внимание обращаю...
SetWindowText собственно и вызывает SendMessage( WM_SETTEXT, ... ); У уж SendMessage сама переключиться в нужный поток (из Remarks по SendMessage):
If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code.
А адресное пространство у потоков общее — так что и с этим проблем нет... Да и если в другой поток отправлять — тоже не есть смаое страшное, так как отдублирует система копию строки в адресное пространство другого процесса.
А вызов метода CWnd::SetWindowText — просто напрямую вызывает ::SetWindowText.
Вобщем, можно, конечно, и двухуровневую схему закрутить — но получиться то же самое, только через двойной вызов SendMessage. Работать-то будет, конечно. Но вот лучший ли это вариант? Тут я уже не уверен...
И в Вашем, и в моём случае происходит переключение в контекст другого потока и блокировка вызывающего до завершения обработки — только у Вас на один SendMessage больше, и существенно больше кода, плюс, видимо, придётся заводить какое-то своё сообщение для обмена с основным потоком. Чтобы не блокировать вызывающий, можно было бы воспользоваться PostMessage — но тут уже нужно создавать копию текста, т.к. неизвестно, что станет с оригиналом, пока дело дойдёт до его обработки в основном потоке.
Хотя, конечно, потренироваться в подобных вещах не вредно — ну, на будущее...
С уважением,
Заливочкин Евгений
P.S. Подобную фишку (интерфейсный диалог и поток, выполняющий длительное дейстие) пишу на автомате года этак с 95-го... Пришлось даже вспоминать, почему так делаю и не задумываюсь. Еще раз убедился, что не со зла

. Спасибо — иногда полезно вспоминать хорошо забытое старое...
P.P.S. — А вообще-то всё это в Рихтере было!