如何在线程和Waitforsingleobject()的等效项之间进行通信

时间:2018-04-25 13:33:00

标签: c++ linux multithreading waitforsingleobject

我刚刚在学校开始使用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;
}

我的输出如下:

Entrezunechaînedecaractères:测试 La chaine transmise est:\ 250 \ 365 \ 277 \ 357 \ 376

非常感谢!

1 个答案:

答案 0 :(得分:0)

同步您的线程并使用C ++标准提供的库。这样你的代码便携。

使用pthread库并不比上面的选项更合适。有一个针对Windows的pthread实现,但是为什么在使用C ++标准提供的内容只编写一次时会遇到麻烦。

要回答您的特定查询,您可以使用睡眠原语,或者如果您需要等待条件,则使用条件变量

看看here