2014-10-27 2 views
0

У меня возникло сообщение об ошибке при вызове функции CreateThread.Сообщение об ошибке с идентификационным номером

#include "stdafx.h" 
#include "Functions.h" 
#include <windows.h> 

int _tmain(int argc, _TCHAR* argv[]) { 
    DWORD TidA, TidB, TidC; 
    HANDLE task1, task2, task3; 

    task1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) Thread1, NULL, 0, &TidA); 
    task2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) Thread2, NULL, 0, &TidB); 
    task3 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) Thread3, NULL, 0, &TidC); 

    SetThreadPriority(task1, THREAD_PRIORITY_HIGHEST); 
    SetThreadPriority(task2, THREAD_PRIORITY_NORMAL); 
    SetThreadPriority(task3, THREAD_PRIORITY_LOWEST); 

    CloseHandle(task1); 
    CloseHandle(task2); 
    CloseHandle(task3); 
} 

void Thread1() 
{ 
    printf("Task#2 >>> started\n"); 
    int *firstFunc = (new Functions())->firstFunc(Data::vectorInitialize(), Data::matrixInitialize(), Data::matrixInitialize()); 
    Sleep(3000); 
    Data::vectorOutput(firstFunc); 
    printf("\nTask#2 >>> finished\n"); 
} 

void Thread2() 
{ 
    printf("Task#1 >>> started\n"); 
    int **secondFunc = (new Functions())->secondFunc(Data::matrixInitialize(), Data::matrixInitialize(), Data::matrixInitialize(), Data::matrixInitialize()); 
    Sleep(2000); 
    Data::matrixOutput(secondFunc); 
    printf("\nTask#1 >>> finished\n"); 
} 

void Thread3() 
{ 
    printf("Task#3 >>> started\n"); 
    int *thirdFunc = (new Functions())->thirdFunction(Data::matrixInitialize(), Data::matrixInitialize(), Data::vectorInitialize()); 
    Sleep(1000); 
    Data::vectorOutput(thirdFunc); 
    printf("\nTask#3 >>> finished\n"); 
} 

Вот сообщение об ошибке:

error C2065: Thread1: undeclared identifier 
error C2065: Thread2: undeclared identifier 
error C2065: Thread3: undeclared identifier 
+1

Перемещение функции выше основной, или вперед объявить их. (P.S: это было задано много * много раз) – Borgleader

+2

Это ошибка времени компиляции, а не исключение во время выполнения. –

+4

НЕ ЗАПОЛНЯЙТЕ ЗАЗЕМЛЕНИЯ. Вместо этого дайте им правильный тип. Еще лучше, используйте стандартную библиотеку потоков. – chris

ответ

2

Резьба1 используется, прежде чем она определяется.

вы можете переместить определения функций Резьба1, thread2, Thread3 выше основного

или вы можете объявить его выше основной.

2

Вы должны направить объявить функции перед тем _tmain:

void Thread1(); 
void Thread2(); 
void Thread3(); 
Смежные вопросы