spooooongq
Grünschnabel
Hallo,
ich habe ein großes Problem und Ich wende mich an euch, damit ihr mir eventuell helfen könnt.
Kurz umschrieben: Nach CreateThread benötige ich einen Funktionsaufruf mit Messagebox, da mir mein Programm sonst abstürzt (Mit beendet es wunderbar).Nur bleibt die Frage: Warum? Compilen lässt sich beides ohne Fehler.
Folgender Quelltext:
und die Datei header.h
Für weitere benötigten Daten/Antworten einfach fragen.
Achja:
OS: WinVista
IDE: CodeBlocks 10.05
compiler:gnucc
Vielen Dank im Vorraus!
Spooooongq
Edit: Winsockets sind in der Threadfunktion und in der WinMain
ich habe ein großes Problem und Ich wende mich an euch, damit ihr mir eventuell helfen könnt.
Kurz umschrieben: Nach CreateThread benötige ich einen Funktionsaufruf mit Messagebox, da mir mein Programm sonst abstürzt (Mit beendet es wunderbar).Nur bleibt die Frage: Warum? Compilen lässt sich beides ohne Fehler.
Folgender Quelltext:
Code:
#include "header.h"
#include <windows.h>//und winuser.h, winsock.h, iostream
string mb(string arg){
Messagebox(NULL,arg.c_str(),"title",0);
return "";
}
int WINAPI WinMain(...){
//auskommentiert, ich bin sicher das tut
mystruct m;
m = &mb;//mb ist eine funktion mit MessageBox aufruf
m.mb("test1");
m.newThread(sock);
//auskommentiert
return 0;
}
und die Datei header.h
Code:
typedef string (*MessageBoxFunc)(string);
struct mystruct {
void newThread(SOCKET sock);
MessageBoxFunc mb;
}
struct Pair {
mystruct m;
SOCKET sock;
}
void mystruct::newThread(SOCKET sock){
HANDLE hThread;
Pair p;
p.m = *this;
p.sock = sock;
DWORD dwThreadID;
hThread = CreateThread( NULL,
0,
ThreadFunc,
&p,
0,
&dwThreadID
);
this->mb("test2");//es geht um diesen benötigten Funktionsaufruf
return;
}
DWORD WINAPI ThreadFunc(LPVOID data){
Pair* params = reinterpret_cast<Pair*>(data);
mystruct m = params->m;
SOCKET sock = params->sock;
m.mb("test3");
return((DWORD)data);
}
Für weitere benötigten Daten/Antworten einfach fragen.
Achja:
OS: WinVista
IDE: CodeBlocks 10.05
compiler:gnucc
Vielen Dank im Vorraus!
Spooooongq
Edit: Winsockets sind in der Threadfunktion und in der WinMain