Добрый вечер, подскажите пожалуйста в чем моя ошибка?
У меня задача создать дополнительный поток, который сортирует массив заполненный случайными числами(от 1 до m) в основном потоке(пример на малом кол-ве элементов = 5)
Если запустить код, сперва будет выведен заполненный массив из основного потока, потом выведен переданный массив в поток, потом отсортированный массив.
Проблема в том, что переданный в поток массив передается порой не полностью т.е. то только 2 элемента то бывает передадутся все 5. Не понимаю в чем проблема..
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
//структура содержащая 2 массива и переменную, которая по сути отвечает за кол-во элементов в массивах
typedef struct structArray
{
int firstSortedArray[4];
int secondSortedArray[4];
int m;
}structArray;
//функция сравнения для qsort
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
//функция потока
DWORD WINAPI firstSort(LPVOID Param){
structArray *s=(structArray*)Param;
for(int i=0;i<s->m;i++)
cout<< i <<" элемент до сортировки массива:" << s->firstSortedArray[i] << endl;
cout<<"----------После сортировки---------" << endl;
qsort(s->firstSortedArray,s->m,sizeof(int),compare);
for(int i=0;i<s->m;i++)
cout<< i <<" элемент после сортировки массива:" << s->firstSortedArray[i] << endl;
return 0;
}
int main(){
setlocale(LC_ALL,"Russian");
int num;
structArray* s=new structArray;
s->m=5;
srand (time(NULL));
//Заполнение случайными значениям от 1 до м массивов
for(int i=0;i<s->m;i++){
num=rand() % s->m +1;
s->firstSortedArray[i]=num;
cout<<i<<"элемент массива заполненный в основном потоке:"<<s->firstSortedArray[i] << endl;
s->secondSortedArray[i]=num;
}
cout<<"----------Работа второго потока-------------" << endl;
DWORD dwThreadId;
HANDLE hThread = CreateThread(0,0,firstSort,s,0,&dwThreadId);
WaitForSingleObject(hThread,5000);
TerminateThread(hThread,dwThreadId);
return 1;
}