Pytanie-> Czy takim mieszaniem nie sprawie, ze program bedzie mniej stabilny lub mial jakies inne problemy?

Kod: Zaznacz cały
while(1) {}
Kod: Zaznacz cały
while(!czasPrzekroczony) {
recvfrom(socket,.....);
[...]
}
Probowalem uzyc jeszcze setjmp i longjmp wywolywane przez sigalrm i alarm ustawiony na 5 sekund (alarm(5)). Ale to powodowalo segmentation fault. Pewnie dlategoze wchodzac do recvfrom czeka na sygnal, a ja go brutalnie przerywam.
Jak przerwac po 5 sekundach tego recvfrom? Moze w QT jest jakies narzedzie, ktore daje taka możliwość?
Kod: Zaznacz cały
pid = fork();
if (pid == 0) {
while(1) { ...pracuje... }
}
sleep(5);
kill (pid,SIGSTOP);
kill (pid,SIGINT);
Kod: Zaznacz cały
threadPracuje.start();
sleep(5);
threadPracuje.terminate();
To raczej nie kwestia języka tylko biblioteki, a co do terminate() to widać na pierwszy rzut oka w dokumentacji. Jak widać RTFM nie boli.marconi pisze: Widać gołym okiem, że w C++ to jest takie bliższe człowiekowiTylko ile się naszukałem tego terminate?!
Nie działało quit, exit, wait...
Wydaje mi się, że jedynym wyjściem jest pamięć współdzielona. Zobacz ten kod:marconi pisze:Może ktoś wie jak zrobić zmienną w moim programie w C++, która bedzie globalna dla forka? W C to wszystko fajnie działa.
Kod: Zaznacz cały
#include <cstdlib>
#include <iostream>
#include <signal.h>
#include <sys/mman.h>
#include <fcntl.h>
using namespace std;
int main()
{
int fd = open("/dev/zero", O_RDWR);
if(fd < -1)
{
cerr << "Failed to open" << endl;
exit(1);
}
int *sharedi = (int*) mmap(0, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (sharedi < (int*) 0)
{
cerr << "Failed to mmap" << endl;
exit(1);
}
int i = 0;
*sharedi = 0;
pid_t pid = fork();
if (pid == 0)
{
while (1)
{
cout << "child" << endl;
i++;
(*sharedi)++;
sleep(1);
}
}
else if (pid < 0)
{
cerr << "Failed to fork" << endl;
exit(1);
}
cout << "parent" << endl;
sleep(3);
kill(pid, SIGKILL);
cout << " i = " << i << endl;
cout << "sharedi = " << *sharedi << endl;
return 0;
}
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 12 gości