powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Посылка сообщений из порожденного потока
17 сообщений из 17, страница 1 из 1
Посылка сообщений из порожденного потока
    #33794837
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VC++. MFC.
Есть консольное приложение. В нем создается экземпляр класса наследованный от CObject. Этот класс в свою очередь создает поток (CWinThread). Каким чудом послать сообщение из этого потока в класс его породивший? PostMessage требует хендл окна. А где ж я его возьму?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794893
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostThreadMessage ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794940
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
требует идентификатор потока которому отправляется сообщение. Как его получить?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794948
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед МакарVC++. MFC.
Есть консольное приложение. В нем создается экземпляр класса наследованный от CObject. Этот класс в свою очередь создает поток (CWinThread). Каким чудом послать сообщение из этого потока в класс его породивший? PostMessage требует хендл окна. А где ж я его возьму?
при создании потока хендл можно передать через первый параметр

AfxBeginThread(GetSafeHwnd()/*wndHandle*/, ...)

а в потоке его привести к HWND и послать сообщение

::PostMessage((HWND)wndHandle, THRD_MESSAGEID, NULL, NULL);
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794960
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня вот так
Код: plaintext
1.
AfxBeginThread(RUNTIME_CLASS(CPlayListThread), THREAD_PRIORITY_NORMAL,  0 , CREATE_SUSPENDED);
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794971
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cerebrum
при создании потока хендл можно передать через первый параметр

AfxBeginThread(GetSafeHwnd()/*wndHandle*/, ...)

а в потоке его привести к HWND и послать сообщение

::PostMessage((HWND)wndHandle, THRD_MESSAGEID, NULL, NULL);

автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CWinThread* AfxBeginThread(
   AFX_THREADPROC pfnThreadProc,
   LPVOID pParam,
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize =  0 ,
   DWORD dwCreateFlags =  0 ,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
);
CWinThread* AfxBeginThread(
   CRuntimeClass* pThreadClass,
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize =  0 ,
   DWORD dwCreateFlags =  0 ,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
);


где вы там увидели первым параметром хендл?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794975
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макару меня вот так
Код: plaintext
1.
AfxBeginThread(RUNTIME_CLASS(CPlayListThread), THREAD_PRIORITY_NORMAL,  0 , CREATE_SUSPENDED);

тогда можно через глобальную переменную HANDLE, если он (поток) один, но это не безопасно...
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33794985
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или же создать в классе, дополнительную переменную и прежде чем создавать поток записывать хендл в нее и потрошить класс уже в потоке.


--------------------------------------------------------------
Don't worry - wear Huggies
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795111
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cerebrumили же создать в классе, дополнительную переменную и прежде чем создавать поток записывать хендл в нее и потрошить класс уже в потоке.


--------------------------------------------------------------
Don't worry - wear Huggies

Вопрос. Чей это хендл? И как его получить? Это ж консольное приложение.
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795122
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GetModuleHandle приведенный к HWND?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795187
NSFuimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабас вроде уже все сказал ... вроде пользуешь MFC значит CWinApp присутствует (?) что мешает AfxGetApp( )->PostThreadMessage();?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795245
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NSFuimusчто мешает AfxGetApp()->PostThreadMessage();
а что мешает
Код: plaintext
1.
2.
3.
4.
5.
6.
BOOL PostThreadMessage(

    DWORD idThread, // thread identifier
    UINT Msg, // message to post
    WPARAM wParam, // first message parameter
    LPARAM lParam  // second message parameter
   );

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795261
NSFuimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну раз уж пошла такая пьянка ... :)) то extern CТвоеApp theApp; и хде угодна theApp.PostThreadMessage() :))
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795612
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как же в классе от CObject объявить MESSAGE_MAP?
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795624
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или даже нетак вопрос поставлю.
Консольное приложение MFC.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// The one and only application object
CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode =  0 ;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(),  0 ))
	{
		// TODO: change error code to suit your needs
		_tprintf(_T("Fatal Error: MFC initialization failed\n"));
		nRetCode =  1 ;
	}
	else
	{
		CTestApp testApp;
        }

	return nRetCode;
}

От кого породить CTestApp, что б он (CTestApp) мог принимать сообщения от порожденных ним потоков?
(Может зря я седня на работу вышел?)
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795677
NSFuimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни разу не писал консольное приложение, но очевидно, што тебе нада написать свой класс от CWinApp в котором и будет фся твоя MESSAGE_MAP ... и вместо CWinApp theApp; поставить свое CMyApp theApp;... этож очевидна ... такое мое мнение(с)
...
Рейтинг: 0 / 0
Посылка сообщений из порожденного потока
    #33795697
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NSFuimusни разу не писал консольное приложение, но очевидно, што тебе нада написать свой класс от CWinApp в котором и будет фся твоя MESSAGE_MAP ... и вместо CWinApp theApp; поставить свое CMyApp theApp;... этож очевидна ... такое мое мнение(с)

очевидно, но работать не хочет если унаследовать от CWinApp. В ран-тайм вываливается с ошибкой в модуле {чего-то там системное}\appcore.h
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Посылка сообщений из порожденного потока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]