[ gristic @ 31.05.2004. 10:02 ] @
Imam program koji nesto radi. Hocu da dok program vrti neku petlju izbacim dialog koji ce obavestiti korisnika da program nesto radi i da saceka. Potrebna mi je sugestija kako to da uradim.
[ milanche @ 01.06.2004. 01:27 ] @
Treba ti nesto sto se zove GUI thread. A ta petlja sto je program vrti ne bi bilo
lose da je izvrsava 'obican' worker thread (bez prozora).

Prekopaj malo MSDN dokumentaciju na temu "GUI thread"
[ gristic @ 01.06.2004. 10:42 ] @
Puno hvala milanche, mnogo mi je pomoglo.
[ djmrky @ 02.06.2004. 07:41 ] @
u slucaju da koristis MFC klase, pogledaj help za CWinThread
[ DarkMan @ 02.06.2004. 12:46 ] @
Prostudiraj malo sledece pa vidi sta ti treba:

Code:

#include "stdafx.h"
#include "resource.h"

DWORD  Memory_ThreadID = 0;
BOOL   Memory_ThreadRunning = FALSE;
BOOL   Memory_Abort = FALSE;

DWORD WINAPI Memory_ThreadProc(HWND hW);

//==========================================================================
// Dialog Procedure
//==========================================================================

BOOL CALLBACK Memory_DlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static MEMORYSTATUS MemStatus;
    switch(uMsg) {
        case WM_INITDIALOG: {
            GlobalMemoryStatus(&MemStatus);
            int Total = (int)(MemStatus.dwTotalPhys / 1048576);
            Slider_Setup(GetDlgItem(hW, IDC_RAM), 1, Total, Total / 10, Total / 10);
            Slider_SetPosition(GetDlgItem(hW, IDC_RAM), Total * 3 / 4);
            CenterWindow(hW);
            break;
        }
        case WM_COMMAND:
            switch(wParam) {
                case IDC_START:
                    if(Memory_ThreadRunning == FALSE)
                        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Memory_ThreadProc, hW, 0, &Memory_ThreadID);
                    else {
                        EnableWindow(GetDlgItem(hW, IDC_START), FALSE);
                        Memory_Abort = TRUE;
                    }
                    break;
                case IDOK:
                case IDCANCEL:
                    if(Memory_ThreadRunning == FALSE) EndDialog(hW, TRUE);
                    return TRUE;
            }
            break;
        case WM_NOTIFY:
            switch(LOWORD(wParam)) {
                case IDC_RAM: {
                    char s[255];
                    sprintf(s, "%d MB", Slider_GetPosition(GetDlgItem(hW, IDC_RAM)));
                    SetDlgItemText(hW, IDC_RAM_DISPLAY, s);
                    break;
                }
            }
            break;
    }
    return FALSE;


//==========================================================================
// Thread 
//==========================================================================

DWORD WINAPI Memory_ThreadProc(HWND hW)
{
    Memory_ThreadRunning = TRUE;
    SetWindowText(GetDlgItem(hW, IDC_START), "Abort");
    EnableWindow(GetDlgItem(hW, IDC_RAM), FALSE);
    HWND hWC = GetDlgItem(hW, IDC_PROGRESS);
    int Total = Slider_GetPosition(GetDlgItem(hW, IDC_RAM));
    LPDWORD lpSegment = (LPDWORD)malloc(Total * sizeof(LPDWORD));
    if(lpSegment) {
        ProgressBar_SetRange(hWC, 0, Total);
        ProgressBar_SetPos(hWC, 0)
        int Current = 0;
        while(Current < Total) {
            lpSegment[Current] = (DWORD)malloc(1048576);
            if(lpSegment[Current] == 0)
                MessageBox(hW, "Error Allocating memory!", "Error", 0);
            ProgressBar_SetPos(hWC, Current++);
            Sleep(0);
            if(Memory_Abort) break;
        }
        while(Current > 0) {
            ProgressBar_SetPos(hWC, Current--);
            free((LPVOID)lpSegment[Current]);
            Sleep(0);
        }
        free((LPVOID)lpSegment);
        ProgressBar_SetPos(hWC, 0);
        Beep(0, 0);
    } else {
        MessageBox(hW, "Error Allocating memory!", "Error", 0);
    }
    Memory_ThreadRunning = FALSE;
    Memory_Abort = FALSE;
    EnableWindow(GetDlgItem(hW, IDC_START), TRUE);
    EnableWindow(GetDlgItem(hW, IDC_RAM), TRUE);
    SetWindowText(GetDlgItem(hW, IDC_START), "Start");
    return 0;
}

[ gristic @ 03.06.2004. 07:50 ] @
Zahvalan sam svima na pomoci. Uspeo sam da resim problem.