[ Ramirez @ 08.05.2005. 12:56 ] @
ne mogu da provalim zasto ovo ne radi... debagujem ceo dan... ubih se... ovo je moj prvi pokusaj multithreading aplikacije a primere u C-u ne mogu da nadjem nigde, a oni u ASM mi ne pomazu mnogo... Izostavio sam kod koji je nebitan tako da ce postojanje threada izgledati besmisleno... thread dok se izvrsava treba da promeni text jedne labele u glavnom dialogu. Thread se pokrece i pravi direktorijum ali onda pukne/izadje u zavisnosti od toga da li je return TRUE ili samo return... ako direktorijum vec postoji onda bi trebala da se pozove funkcija SetDlgItemText (i ona radi OK kada se pozove) ali program opet nakon toga pukne ako je return FALSE ili izadje ako je samo return??? Code: #include <windows.h> #include "resource.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); DWORD CALLBACK ThreadProc(LPVOID lpParameter); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; DialogBoxParam(hInstance, (LPCTSTR)IDD_MAIN, NULL, (DLGPROC)WndProc, 0); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HANDLE hThread; switch(message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if(LOWORD(wParam)==IDC_START) { hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc(hWnd), NULL, NORMAL_PRIORITY_CLASS, NULL); // WaitForSingleObject(hThread, INFINITE); nemama pojma da li mi je ovo potrebno.. mislim da nije ali sam ipak probao CloseHandle(hThread); return TRUE; } else if(LOWORD(wParam)==IDC_EXIT) { EndDialog(hWnd, 0); return TRUE; } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return FALSE; } DWORD CALLBACK ThreadProc(LPVOID lpParameter) { char szDirPath[]="c:\\MPC\\"; // DWORD dExitCode; if(!CreateDirectory(szDirPath, NULL)) { SetDlgItemText(lpParameter, IDC_STATUS, "Couldn't create new directory."); // GetExitCodeThread(hThread, &dExitCode); // TerminateThread(hThread, dExitCode); return; //ako je ovo return TRUE program pukne } return TRUE; //i ovde puca, ako je samo return onda program izadje ??? } negde sam procitao da threading funkcija mora da se deklarise kao DWORD CALLBACK ime(LPVOID lpParameter) verovatno nesto bitno propustam ali nemam pojma sta??? nemam pojma ni cemu sluze return vrednosti posto se sama funkcija poziva unutar CreateThread? |