Wątek i wyjątek, czyli błędy w programach C++

0

Cześć.
Mam taki kod:

// C++ API headers
#include <iostream>

// POSIX API headers
#include <pthread.h>

void *watek(void *fWsk)
{
  throw "Wyjątek";
  return NULL;
}

int funkcja_a()
{
  pthread_t thread1;

  try
  {
    pthread_create(&thread1, NULL, &watek, NULL);
  }
  catch (const char *fMessage)
  {
     std::cerr << "Wyjątek: " << fMessage;
  }

  return 0;
}

int main()
{
  funkcja_a();
  return 0;
}

Problem w tym, że wyjątek nie jest przechwytywany.

0

bo rzucasz go w watku 2 a chcesz lapac w watku 1

0

Może problemem są zależności czasowe. Słabo znam pthread więc nie wiem na pewno ale w opisie funkcji kreacji nie jest jawnie powiedziane że utworzony wątek od razu dostaje CPU. Jeśli by tak nie było to zauważ że byc może sterowanie wróci do funkcji main() i zrobi exit() do systemu nim wątek dostanie CPU i dokona throw.

0

Ludzie, dla mnie to oczywiste. W try znajduje się funkcja tworząca wątek. Przebiega bez żadnego problemu, więc nic nie rzuca i catch nic nie łapie

Tymczasem w drugim wątku funkcja rzuca wyjątek. Nie ma kto go złapać więc się wykrzacza.

Już nie mówiąc o tym, że tworzysz nowy wątek i od razu wychodzisz z programu. WTF? A gdzie go zamykasz? Chyba, że te wątki mają coś z RTTI, ale raczej mi się nie wydaje...

0
olo16 napisał(a)

Ludzie, dla mnie to oczywiste. W try znajduje się funkcja tworząca wątek. Przebiega bez żadnego problemu, więc nic nie rzuca i catch nic nie łapie

Tymczasem w drugim wątku funkcja rzuca wyjątek. Nie ma kto go złapać więc się wykrzacza.

Ale co mogę z tym zrobić, żeby działało tak, jak ja chcę lub podobnie?

olo16 napisał(a)

Już nie mówiąc o tym, że tworzysz nowy wątek i od razu wychodzisz z programu. WTF? A gdzie go zamykasz? Chyba, że te wątki mają coś z RTTI, ale raczej mi się nie wydaje...

W oryginale czekam na jego zakończenie. Kod ma służyć zobrazowaniu sytuacji, bez zbędnych funkcji, przedstawić istotę problemu.

0

lap wyjatek w funkcji watku. jesli chcesz go lapac na zewnatrz funkcji to zrob pomocnicza funkcje wrapper.

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