Другие языки программирования и технологии

как сделать так чтобы два блока программы выполнялись одновременно в c++ ?

сначала начинает выполнятся один блок программы, только потом второй, а нужно, чтобы выполнялось сразу два.
Потоки используй ( CreateThread )
Viktor(_) F(_)
Viktor(_) F(_)
66 887
Лучший ответ
Одновременно два или больше с взаимными блокировками доступа к общему - копай "thread" (Это библиотечно и системно зависимое - в самих плюсах этого нет. смотри на библиотеки под конкретную операционку от конкретной фирмы. в винде встроено "по событию новый поток" в юниксах надо самостоятельно разруливать и есть больше пространства для манёвра - ты не указываешь в какой среде и с какими библиотеками это надо делать)
Если для windows то вот держи накидал небольшой пример с семью потоками.

#include <windows.h>
#include <time.h>
#include <stdio.h>
#define MAX_THS 7

HANDLE hevent = NULL;

inline WORD FontColor(BYTE r, BYTE g, BYTE b){
if(!(r|g|b))
r |= 1;
return (WORD)((r*FOREGROUND_RED) | (g*FOREGROUND_GREEN) |
(b*FOREGROUND_BLUE)) | FOREGROUND_INTENSITY;
}

// поточная функция, выводит ID-потока в консоль
DWORD WINAPI ThreadProc(LPVOID arg){
wchar_t s[32];
short x = -1;
HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = *(COORD*)arg;
DWORD dwr = 0;
DWORD n = (DWORD)wsprintfW(s, L"ПОТОК ID: %u", GetCurrentThreadId());

CONSOLE_SCREEN_BUFFER_INFO si;
GetConsoleScreenBufferInfo(hout, &si);
const DWORD _twait = (DWORD)50 + (rand() % 100);
const WORD _fcol = FontColor((BYTE)rand()%2, (BYTE)rand()%2, (BYTE)rand()%2);

while(WaitForSingleObject(hevent, _twait) == WAIT_TIMEOUT) {
if(x != -1){
COORD pt = { x, pos.Y };
FillConsoleOutputCharacterW(hout, L'\0', n, pt, &dwr);
}
FillConsoleOutputAttribute(hout, _fcol, n, pos, &dwr);
WriteConsoleOutputCharacterW(hout, s, n, pos, &dwr);
x = pos.X;
++pos.X %= si.dwSize.X;
}
return 0;
}

int main(void){
hevent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(hevent == NULL)
return 1;
ResetEvent(hevent);

srand(time(NULL));
COORD pos[MAX_THS];
HANDLE ths[MAX_THS];
for(int i = 0; i < MAX_THS; ++i) {
pos[i].X = (short)(rand() % 20);
pos[i].Y = (short)(i+2)*2;
ths[i] = CreateThread(NULL, 0, ThreadProc, (LPVOID)&pos[i], 0, NULL);
}

puts("exit any key");
getchar();
SetEvent(hevent);
CloseHandle(hevent);
WaitForMultipleObjects(MAX_THS, ths, TRUE, INFINITE);
for(int t = 0; t < MAX_THS; ++t)
CloseHandle(ths[t]);
return 0;
}
Марик(Дракон) ;-)
Марик(Дракон) ;-)
11 372
Сложно сказать про абстрактные блоки, но для распараллеливания можно использовать thread'ы. Но, всё зависит от самого кода и блоков.