如何在mac上的c ++应用程序中使用多线程?

时间:2017-04-07 23:47:41

标签: c++ multithreading

我需要在下面的代码中添加线程,有什么快速的方法吗?

int main() {
    ObjectType obj1;
    ObjectType obj2;
    printMaze(obj1, obj2);
    getUserInput(obj1, obj2);
    return 0;
}

void printMaze(ObjectType&obj1, ObjectType&obj2){
    ///
    ///
    ///
}

void getUserInput(ObjectType&obj1, ObjectType&obj2){
    ///
    ///
    ///
}

我希望能够在单独的线程中调用printMaze和getUserInput,并让它们使用相同的变量[本质上共享一个变量]。

1 个答案:

答案 0 :(得分:0)

就在我的脑海中,这是在Mac上实现线程的一种非常快捷的方法

#include <stdio.h>
#include <time.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

//contains all the information needed
struct AllInfo{
    ObjectType obj1;
    ObjectType obj2;
};

int main() {
    srand(time(NULL));
    pthread_t printingThread;
    pthread_t inputThread;
    AllInfo info;
    pthread_create(&printingThread, NULL, &printMaze, &info);
    pthread_create(&inputThread, NULL, &getUserInput, &info);
    pthread_exit(NULL);
    return 0;
}
void *printMaze(void * infoArg) {
    AllInfo *info;
    info= ( AllInfo *)infoArg;
    ///
    ///
    pthread_exit(NULL);
}
void *getUserInput(void *infoArg) {
    AllInfo *info;
    info= (struct AllInfo *)infoArg;;
    ////
    ////
    pthread_exit(NULL);
}
你会发现一些事情     将参数传递给将在线程中调用的函数时,
        [1]你只能将1个参数传递给该函数,因此如果你需要在函数调用中执行多个参数,则必须使用结构将各个参数捆绑在一起。和
        [2]当将参数传递给在线程中调用的函数时,在将类型转换回原始的“AllInfo”对象类型之前,您需要首先从函数中接受它作为“void *”类型的对象。