[C]Wątek w programie

0

Pisze sobie mój pierwszy program z wątkiem w winapi. Wszystko ładnie się kompiluje, ale gdy włączam program pętla w procedurze wątku działa tylko raz, a w warunku ma przecież while(true). Chciałbym, aby wątek wykonwywał się, dopóki użytkownik nie wyłączy programu. Jak mogę to zrobić?

Oto kod:

#include <windows.h>
#include <time.h>
#include <stdio.h>

DWORD WINAPI Dzialaj(LPVOID lpParameter);

int main()
{
    char folder[250];
    GetCurrentDirectory(250, folder);
    printf("Jestm w folderze : %s\n\n", folder);
    HANDLE watek = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) Dzialaj, NULL, 0, NULL);
    return 0;
}

DWORD WINAPI Dzialaj(LPVOID lpParameter)
{
      int licznik = 0;
      while(true)
      {
              licznik++;
              printf("Jestem poraz %d\n", licznik);
              Sleep(1*1000);
      }
}
0

Wykonuje sie raz, poniewaz pozniej wykonanie kodu wraca do main. I co robisz w main? return 0; A wiec aplikacja sie konczy, a wraz z nia wszystkie stworzone przez nia watki.

0

Więc co mogę zrobić, żeby wątek wykonywał się nadal? Ten program nie ma już nic więcej do zrobienia, pracować ma tylko wątek.

0

Nie wiem czy dobrze mówię ale chyba przed return w main daj coś takiego

WaitForSingleObject(watek, INFINITE);
0

W main, poczekaj az watek sie skonczy. Aby tego dokonac, poczytaj o synchronizacji (mutex, event, semaphore)
Albo jezeli chcesz, to nie tworz watku, tylko calkowicie osobny proces - wywolanie innego pliku exe.

manfredek napisał(a)

Nie wiem czy dobrze mówię ale chyba przed return w main daj coś takiego

WaitForSingleObject(watek, INFINITE);

Dobrze mowisz, szkoda tylko ze wszystko wyjawiasz. Jezeli interesuje sie tematem watkowosci, wystarczylo jedynie podpowiedziec czego powinien szukac, a nie jak zrobic ;)

0

Działa, dziękuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1