简单的pthread! C ++

时间:2009-07-16 07:32:04

标签: c++ pthreads

我不知道为什么这不起作用

#include <iostream>
#include <pthread.h>
using namespace std;

void *print_message(){

    cout << "Threading\n";
}



int main() {

    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    return 0;
}

错误:

  

[描述,资源,路径,位置,类型]初始化参数3   'int pthread_create(pthread_t *,const pthread_attr_t *,void *)   (*)(void *),void *)'threading.cpp threading / src第24行C / C ++   问题

6 个答案:

答案 0 :(得分:36)

您应该将主题声明声明为:

void* print_message(void*) // takes one parameter, unnamed if you aren't using it

答案 1 :(得分:18)

因为主线程退出。

在主线程中休眠。

cout << "Hello";
sleep(1);

return 0;

POSIX标准没有规定主线程退出时会发生什么 但在大多数实现中,这将导致所有生成的线程死亡。

因此在主线程中,您应该在退出之前等待线程死亡。在这种情况下,最简单的解决方案就是睡眠并为其他线程提供执行机会。在实际代码中,您将使用pthread_join();

#include <iostream>
#include <pthread.h>
using namespace std;

#if defined(__cplusplus)
extern "C"
#endif
void *print_message(void*)
{
    cout << "Threading\n";
}



int main() 
{
    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    void* result;
    pthread_join(t1,&result);

    return 0;
}

答案 2 :(得分:2)

来自pthread函数原型:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
    void *(*start_routine)(void*), void *arg);

传递给pthread_create的函数必须有

的原型
void* name(void *arg)

答案 3 :(得分:2)

这对我有用:

#include <iostream>
#include <pthread.h>
using namespace std;

void* print_message(void*) {

    cout << "Threading\n";
}

int main() {

    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    // Optional.
    void* result;
    pthread_join(t1,&result);
    // :~

    return 0;
}

答案 4 :(得分:0)

使用G ++编译时,记得放入-lpthread标志:)

答案 5 :(得分:0)

联动。试试这个:

extern "C" void *print_message() {...