Я очень удивлен странным исключением, которое я получил.
class Threads {
public:
Threads() {}
~Threads() {}
void StartThread(int (*p)()); //pointer to a function
private:
HANDLE hThread;
DWORD dwThreadID;
};
Метод StartThread должен получить указатель на мою функцию (которая будет выполняться в другом потоке).
Эта функция проста.(как вы можете видеть, он находится вне класса Threads):
int MyThread()
{
return 0;
}
И это метод создания потока:
inline void Threads::StartThread(int (*p)())
{
hThread = CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)(*p)(),
NULL,
0,
&dwThreadID);
if (hThread == NULL)
{
return;
}
}
Здесь компилятор получает ошибку: не может преобразовать параметр 3 изот int до LPTHREAD_START_ROUTINE.Вот почему я сделал кастинг.
В основной функции я создаю объект типа Threads и пытаюсь вызвать метод StartThread.В качестве параметра я отправляю указатель на функцию MyThread.
Threads *thread1;
thread1 = new Threads();
thread1->StartThread(MyThread);
Я думал, что MyThread должен начинаться в другом потоке.Но функция MyTread всегда запускается в Main Thread !!!И только после того, как MyThread заканчивается, запускается другой поток, и затем я получаю это исключение: необработанное исключение в 0x00000000 в ThreadClass.exe: 0xC0000005: нарушение доступа.
Мне нужен умный совет!