Вторник, 26 Ноября 2024, 10:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Нужна помощь в работе с потоками
alex_progerДата: Вторник, 03 Июля 2012, 20:16 | Сообщение # 1
участник
Сейчас нет на сайте
Итак я сегодня решил что моему "движку" не хватает консоли разработчика и решил я приделать консоль (окошко через winapi в котором будут выводиться этапы работы, ошибки и т.д.). Окно должно работать в отдельном потоке и тут возникла проблема : как работать с потоками в классе?

meConsole.h :
Code

#ifndef CONSOLE_H
#define CONSOLE_H

#include <Windows.h>    

LRESULT CALLBACK winPC(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

class meConsole
{
private:
  HWND MainWindowHandle;
   
  HINSTANCE _inst;
  LPCSTR    _title;
public:
  bool InitWindowsApp(HINSTANCE instanceHandle, int show, LPCSTR title);
  meConsole(HINSTANCE inst, LPCSTR title);
  ~meConsole(void);
};

#endif

meConsole.cpp :
Code

#include "meConsole.h"

meConsole::meConsole(HINSTANCE inst, LPCSTR title)
{
  _inst = inst;
  _title = title;

  InitWindowsApp(_inst,0,_title);
  MSG msg;
     ZeroMemory(&msg, sizeof(MSG));
  while(GetMessage(&msg, 0, 0, 0) )
     {
   // Транслируем сообщение и посылаем его функции обработке сообщений окна
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
}  
bool meConsole::InitWindowsApp(HINSTANCE instanceHandle, int show, LPCSTR title)
{
  // Создание класса окна
     WNDCLASS wc;  

     wc.style         = CS_HREDRAW | CS_VREDRAW;
     wc.lpfnWndProc   = winPC;
     wc.cbClsExtra    = 0;
     wc.cbWndExtra    = 0;
     wc.hInstance     = instanceHandle;
     wc.hIcon         = LoadIcon(0, IDI_APPLICATION);
     wc.hCursor       = LoadCursor(0, IDC_ARROW);
     wc.hbrBackground =  
     static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
     wc.lpszMenuName  = 0;
     wc.lpszClassName = "WinAPP";

     // Регистрация класса окна
     // В случае неудачи выводим сообщение об ошибке и возвращаем false
     if(!RegisterClass(&wc))  
     {
         MessageBox(0, "RegisterClass - FailedL", 0, 0);
         return false;
     }

  MainWindowHandle = CreateWindow( "WinAPP", title, (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_VISIBLE), CW_USEDEFAULT, CW_USEDEFAULT, 450, 500, 0, 0, NULL, 0);
     // Если окно не было создано, выводим сообщени об ошибке и возвращаем false
     if(MainWindowHandle == 0)
     {
         MessageBox(0, "CreateWindow - FailedL", 0, 0);
         return false;
     }
  return true;
}

LRESULT CALLBACK winPC(HWND   windowHandle, UINT msg,  WPARAM wParam, LPARAM lParam)
{
     // Обработка сообщений
     switch( msg )
     {
         // При уничтожении окна, отправить сообщение о выходе для прерывания обработки сообщений
         case WM_DESTROY:  
     PostQuitMessage(0);  
             return 0;
     }
     // Обработка сообщений по умолчанию
     return DefWindowProc(windowHandle, msg, wParam, lParam);
}


Помогите как в ф-ии meConsole(HINSTANCE inst, LPCSTR title) после присвоения значения переменных сделать отдельный поток в котором будет исполняться следующий код :
Code

InitWindowsApp(_inst,0,_title);
  MSG msg;
     ZeroMemory(&msg, sizeof(MSG));
  while(GetMessage(&msg, 0, 0, 0) )
     {
   // Транслируем сообщение и посылаем его функции обработке сообщений окна
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }


За верное решение или ссылку с нужным материалом + обеспечен (а может и ++) batman
НохчиДата: Вторник, 03 Июля 2012, 20:20 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
[url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx]Вот[/url]

Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Вторник, 03 Июля 2012, 20:21
alex_progerДата: Вторник, 03 Июля 2012, 20:36 | Сообщение # 3
участник
Сейчас нет на сайте
Попытался сделать так :
DWORD WINAPI MyThreadFunction( LPVOID lpParam ); (объявил вне класса чтобы CreateThread увидел) и теперь мачаюсь вот над чем :
InitWindowsApp эта ф-ия объявлена в классе а MyThreadFunction вне класса и теперь надо как то её использовать. Если нужен обновлённый код могу скинуть по запросу.
НохчиДата: Вторник, 03 Июля 2012, 20:41 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Quote (alex_proger)
InitWindowsApp эта ф-ия объявлена в классе а MyThreadFunction вне класса и теперь надо как то её использовать.

Передавай нужные данные как параметры.


Многие вопросы по Windows отпадут, если посмотреть тут
alex_progerДата: Вторник, 03 Июля 2012, 20:57 | Сообщение # 5
участник
Сейчас нет на сайте
Подскажите пожалуйста как это сделать =)

Добавлено (03.07.2012, 20:57)
---------------------------------------------
всё спасибо я нашёл ответ

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг