Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OSSP-03.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <stdlib.h>
- #include <time.h>
- #include <process.h>
- #include <windows.h>
- const unsigned int S = 500 * 1024 * 1024/sizeof (int);
- struct param{
- char* name; int num; int count;
- };
- void create_file(char*);
- unsigned int _stdcall search_number(void*);
- int _tmain(int argc, _TCHAR* argv[])
- {
- unsigned int sr[5];
- HANDLE handle[5];
- struct param par1 = { "demo01.bin", 5, 0 };
- struct param par2 = { "demo02.bin", 121, 0 };
- struct param par3 = { "demo03.bin", 157, 0 };
- struct param par4 = { "demo04.bin", 213, 0 };
- struct param par5 = { "demo05.bin", 307, 0 };
- srand((unsigned int)time(NULL));
- /*create_file("demo01.bin");
- create_file("demo02.bin");
- create_file("demo03.bin");
- create_file("demo04.bin");
- create_file("demo05.bin");*/
- //search_number(&par1);
- handle[0] = (HANDLE)_beginthreadex(NULL, 0, search_number, &par1, 0, &sr[0]);
- handle[1] = (HANDLE)_beginthreadex(NULL, 0, search_number, &par2, 0, &sr[1]);
- handle[2] = (HANDLE)_beginthreadex(NULL, 0, search_number, &par3, 0, &sr[2]);
- handle[3] = (HANDLE)_beginthreadex(NULL, 0, search_number, &par4, 0, &sr[3]);
- handle[4] = (HANDLE)_beginthreadex(NULL, 0, search_number, &par5, 0, &sr[4]);
- WaitForMultipleObjects(5, handle, TRUE, INFINITE);
- printf("%d\n", par1.count);
- printf("%d\n", par2.count);
- printf("%d\n", par3.count);
- printf("%d\n", par4.count);
- printf("%d\n", par5.count);
- return 0;
- }
- void create_file(char* name)
- {
- FILE *f;
- errno_t err;
- int number;
- err = fopen_s(&f, name, "wb");
- for (unsigned int i = 0; i < S; i++)
- {
- number = rand();
- fwrite(&number, sizeof(int), 1, f);
- if (i % 10000 == 0)
- printf("%f\n", i*1.0 / S);
- }
- fclose(f);
- }
- unsigned int _stdcall search_number(void* p)
- {
- DWORD t = GetTickCount();
- FILE *f;
- int number, i = 0, *mas;
- size_t N;
- errno_t err;
- mas = (int*)calloc(25600, sizeof(int));
- struct param* pr = (struct param*)p;
- err = fopen_s(&f,pr-> name, "rb");
- if (err == 0)
- {
- printf("filename %s\n", pr->name);
- do
- {
- N = fread(mas, sizeof(int), 25600, f);
- //printf("N= %d filename %s\n", N, pr->name);
- for (int j = 0; j < N; j++)
- {
- if (mas[j] == pr->num)
- pr->count++;
- }
- //if (++i % 10000 == 0)
- // printf("%f\n", i*1.0 / S);
- } while (N);
- }
- printf("N= %d filename %s\n", N, pr->name);
- free(mas);
- fclose(f);
- printf("time= %d filename %s\n", GetTickCount() - t, pr->name);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement