Многозадачность средствами WinApi() ФУНКЦИИ

Рассмотрим функции win api , которые помогут нам написать простенькую программку использующую два потока в рамках одного процесса - главный и дополнительный .

для создания нового процесса в винде используют функцию (http://vsokovikov.narod.ru/New_MSDN_API/...) =

BOOL CreateProcess(
  LPCTSTR lpApplicationName ,                 /* имя исполняемого модуля */
  LPTSTR lpCommandLine,                       /* командная строка - если имя исполняемого модуля NULL - то первое слово (то что до первого 
                                                                 пробела)
                                                                  в передаваемой строке считается именем запускаемого файла */
  LPSECURITY_ATTRIBUTES lpProcessAttributes , /*/ SD (дескриптор безопасности)  для процесса*/
  LPSECURITY_ATTRIBUTES lpThreadAttributes,   /* SD   (дескриптор безопасности)  для процесса для потока*/
  BOOL bInheritHandles,                       /* дескриптор параметра наследования */
  DWORD dwCreationFlags,                      /* флажки создания  - комбинация флагов создания процесса*/
  LPVOID lpEnvironment,                       /* новый блок конфигурации*/
  LPCTSTR lpCurrentDirectory,                 /* имя текущего каталога*/
  LPSTARTUPINFO lpStartupInfo,                /* информация предустановки*/
  LPPROCESS_INFORMATION lpProcessInformation  /* информация о процессе*/
); 

создание потока (нити)(http://vsokovikov.narod.ru/New_MSDN_API/...)=

HANDLE CreateThread(

        LPSECURITY_ATTRIBUTES lpThreadAttributes, /*// дескриптор защиты*/
        SIZE_T dwStackSize,                       /*// начальный размер стека*/
        LPTHREAD_START_ROUTINE lpStartAddress,  /*сюда передаём указатель на функцию , чей код будет исполняться в рамках 
    новой    нити(=потока)   причём эта функция должна иметь вид  DWORD WINAPI ThreadFunction(LPVOID lpParameter);*/
        LPVOID lpParameter,                      /* // параметр потока - см. комментарии к предыдущему аргументу, данный параметр будет 
передан в функцию предыдущего аргумента DWORD WINAPI ThreadFunction(LPVOID lpParameter); */
        DWORD dwCreationFlags,                   /* // опции создания*/
        LPDWORD lpThreadId                       /* // идентификатор потока*/

);

пример создания нового потока (нити) си для windows

далее рассмотрим вопрос синхронизации потоков.

vedro-compota's picture

читать про семафор = http://ru.wikipedia.org/wiki/%D0%A1%D0%B...

Семафор - про принципу действия основан на поднятии или спуске флага - то есть посмотрев на эту структуру процесс может понять - занят ли общий ресурс (память , файл) или что-либо иное - этот флаг показывает доступность ресурса

HANDLE CreateSemaphore
(
	LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,	/*// атрибут доступа*/
	LONG lInitialCount,			/*// инициализированное начальное состояние счетчика - этот параметр определяет
                                                      есть ли ещё свободые ресурсы и сколько их всего , то есть если у  компьютера есть три порта , которые точно 
будут свободны при запуске программы , то в 
                                                      начале значение это = 3   - то есть три процесса могу использовать ресурс "порты" - далее по мере работы программы  порты могут заниматься, а этот параметр будет уменьшаться , если он равен нулю , и какому-то процессу нужно использовать порт, то этому процессу придётся подождать пока порт освободится.*/
	LONG lMaximumCount,		/*	// максимальное количество обращений - например максимально возможное число портов, которое выделяется для работы программы (второй параметр - это число портов выделяемое программе по умолчанию в начале работы - оно не обязательно будет максимально возможным)*/
	LPCTSTR lpName			/*	// имя объекта - указатель на строку, содержащую имя семафора*/
);

_____________
матфак вгу и остальная классика =)