Как общаться между потоками и эквивалентными для Waitforsingleobject () - PullRequest
0 голосов
/ 25 апреля 2018

Я только начинаю C ++ в школе и пытаюсь работать как с Linux, так и с Windows.Вот мой код и упражнение.Дело в том, что я понятия не имею, как определить время запуска потока, и всякий раз, когда я запускаю его, я не получаю правильный символ.

#include <iostream>
#include <cstdlib>
#include <pthread.h>


using namespace std;
bool t;

#define NUM_THREADS  3

void *Saisie(void *PT)
{
    char TT[150];
    cout << "Entrez une chaîne de caractères :" <<endl;
    cin >> TT;
    t = true;
    pthread_exit(NULL);
}

void *Visualisation(void *PT)
{
cout<<"La chaine transmise est :" <<  &*(char*)PT <<endl;
    pthread_exit(NULL);
}

int main ()
{
    pthread_t TH1;
    pthread_t TH2;
    char TT[150];
    t = false;

    while (t == false){
        pthread_create(&TH1,NULL,Saisie,&TT);  // Création du thread TH1
        pthread_join(TH1,NULL);
    }
    if (t == true){
        pthread_create(&TH2,NULL,Visualisation,&TT);  // Création du thread TH2
        pthread_join(TH2,NULL);
    }

    cout << "\nFin du programme – saisir une lettre pour fermer\n";
    cin >> TT;
}

И мой вывод следующий:

Entres une chaîne de caractères: test La Chaine transmise est: \ 250 \ 365 \ 277 \ 357 \ 376

Большое спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

синхронизируйте ваши потоки и используйте библиотеку, предусмотренную стандартом C ++. Таким образом, ваш код переносим.

Использование библиотеки pthread не более желательно, чем указанная выше опция. Существует реализация pthread для Windows, но зачем переходить к этой проблеме, когда вы можете написать только один раз, используя то, что обеспечивает стандарт C ++.

Чтобы ответить на ваш конкретный запрос, вы можете либо использовать примитив sleep , либо, если вам нужно подождать условие, тогда используйте переменные условия

Взгляните здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...