argc und argv übergabe in thread
-
hi folks,
sorry für eine wahrscheinlich dumme frage, aber ich bin niergends fündig geworden.
Ein Programm wurde von mir erweitert und es soll so gut wie möglich in seinem ursprungszustand gelassen werden, nur halt noch ein paar spezielle sachen
das c programm hat eine
main(int argc, char **argv)
das programm ist mitlerweile mfcfähig und startet über CMainFrameApp. Dort werden dann diverse sachen ausgeführt bevor die eigentliche mainfunktion in einem eigenem thread aufgerufen wird. Dies mache ich folgendermaßen:
handle = (HANDLE) _beginthread( main(argc,argv),0,NULL); WaitForSingleObject(handle,INFINITE);
Progleme habe ich nur, dass ich vordefinierte Parameter übergeben will an die main.
kann mir einer vielleicht sagen wie ich c/c++ noob (hab mich leider noch nicht richtig einarbeiten können, zumindest vertieft ;)) vordefinierte parameter übergeben kann???
danke schonmal im vorraus
mfg
sjoker
-
Das geht so nicht, Du musst hierfür zuerst eine Wrapper-Funktion als Thread-Einstiegspunkt schreiben, inder Du dann die Parameter übergibst...
DWORD WINAPI MyThread(LPVOID pData) { // Hier kannst Du noch "pData" verwenden um die Daten zu bekommen return main(....); } CreateThread(...MyThread, ...);
-
@Jochen Kalmbach
danke dir für den tipp, nur nun kriege ich irgendwie nichts zum laufen! irgendwas mache ich total falsch. auch wenn ich so langsam die vermutung habe, ich hätte doch von c++ die finger lassen sollen, so hoffe ich zumindest das beenden zu können. never change a running system kann ich mir grade nur denken.
DWORD WINAPI wrappermainthread(LPVOID pData) { return main(argc,argv); }
CreateThread(wrappermainthread,(LPVOID),hmain); WaitForSingleObject(hmain,INFINITE);
wirft mir je nachdem was ich ändere trotzdem fehler en masse aus. viele fehler im code konnte ich schon beseitigen, aber da hier mir zu viele auftauchen würde ich mich sehr freuen doch nochmals hilfe zu bekommen. bevor ich noch verrückt werde, denn auch die msdn hilfe hat mir leider kaum weiter geholfen.
mfg
sjoker
-
#include <windows.h> #include <tchar.h> typedef struct mainArgs { int argc; TCHAR **argv; } mainArgs; DWORD WINAPI mainWrapper(LPVOID pData) { mainArgs *ma; ma = (mainArgs*) pData; return secondMain(ma->argc, ma->argv); } int _tmain(int argc, TCHAR* argv[]) { mainArgs ma; ma.argc = argc; ma.argv = argv; DWORD dwThreadId; HANDLE hThread = CreateThread(NULL, 0, mainWrapper, &ma, 0, &dwThreadId); if (hThread != INVALID_HANDLE_VALUE) { WaitForSingleObject(hThread, INFINITE); DWORD dwExitCode; GetExitCodeThread(hThread, &dwExitCode); CloseHandle(hThread); return dwExitCode; } return -1; }
-
Es gibt auch __argv und __argc auf die du überall Zugriff hast.
-
............... schrieb:
Es gibt auch __argv und __argc auf die du überall Zugriff hast.
Aber nicht offiziell dokumentiert