Основой из основ распределенных вычислений я считаю потоки приложений. На базе них можно реализовать распределенный вычисления на локальной машине, как с общей памятью(если функция потока будет изменять глобальную для приложения область памяти ), так и с разделенной (если функция потока будет работать с собственными локальными переменными/памятью).
В работе с потоками в Windows задействовано, две основные функции:
- Первая – это функция из API отвечающая за создание потока – CreateThread();
- Вторая- функция самого потока, которая задается пользователем – ThreadProc().
Не буду многословен, вот пример:
#include <windows.h> #include <stdio.h> void *mainThread; DWORD * id; // Наша ThreadProc DWORD WINAPI treadFunction(LPVOID lpParameter) { DWORD exitCode; while (GetExitCodeThread(mainThread,&exitCode) && exitCode == STILL_ACTIVE) { // пока не выйдем из программы // что-то делаем в отдельном потоке printf("----------------- Hello from sub thread\r\n"); Sleep(5000); // сделаем паузу чтобы вывод не превратился в "мясо на экране" } return 0; } int main() { mainThread = GetCurrentThread(); // достаем ссылку на поток текущего приложения CreateThread(NULL,0,treadFunction,NULL,0,id); // создаем новый поток while(true) { // программа тоже делает что-то свое printf("Hello from main thread\r\n"); Sleep(1000); // аналагично комментарию к Sleep выше } return 0; // выходим из программы }
Данный пример будет выводить в консольное окно каждые 5 секунд «—————– Hello from sub thread» из созданного потока и «Hello from main thread» каждую секунду. Что подтверждает одновременную работу функции потока, и основного потока программы.
P.S. Сегодня сменил дизайн блога, со стандартного на Cleanr, сам за создание дизайна не взялся, потому что давно этого уже не делал, да и как-то не охота.


Fiat на сайте об автомобилях.