pthread的在C创建错误++

可能重复:
从类的pthread功能

我得到一个错误(“无法转换.....”),我认为在pthread_create的调用第三个说法是错误的。 我所知道的第三个参数的类型应该是(无效*)*(无效*),但我仍然得到一个错误。

void ServerManager::Init(){ pthread_t thread; pthread_create(&thread, NULL, AcceptLoop, (void *)this); }

我宣布这样的,我想拨打以下功能

void* ServerManager::AcceptLoop(void * delegate){ }

请让我知道如何解决这个..

提前致谢。

--------------解决方案-------------

可移植的回调函数必须使用C ABI;

extern "C" void* AcceptLoop(void*);

class ServerManager
{
public:
void Init();

private:
friend void* AcceptLoop(void*);

void* AcceptLoop(); // Implement this yourself
pthread_t thread;
};

void ServerManager::Init()
{
pthread_create(&thread, NULL, &AcceptLoop, reinterpret_cast<void*>(this));
}

void* AcceptLoop(void* delegate)
{
return reinterpret_cast<ServerManager*>(delegate)->AcceptLoop();
}

void* ServerManager::AcceptLoop()
{
// Do stuff
// Be carefull this may (or may not) start before ServerManager::Init() returns.
return NULL;
}

编辑:根据评论

在pthread_join()

这将等待一个特定的线程退出。 调用pthread_create的()中的线程可以调用在pthread_join()以等待子来完成。 这方面的一个好地方将(可能)是把在ServerManager的的析构函数的加盟。

pthread_cancel可以()

pthread_cancel可以()是用于线程停止的异步请求。 此次电话会议将立即返回(因此,并不意味着线程是死呢)。 它是不确定它将如何quickily停止执行你的代码,但它应该执行一些整齐处理,然后退出。 这是一个好主意,等待取消使用线程pthread_jon()。

class ServerManager
{
public:
void ~ServerManager()
{
join();
}
void* join()
{
void* result;
pthread_join(thread, &result);
return result;
}
void cancel()
{
pthread_cancel(thread);
join();
}
... like before
};

你需要让你的AcceptLoop(void*)静态函数。

例:

class ServerManager {
// ...
static void* AcceptLoop(void*);
void* AcceptLoop(); // Implement this yourself
};

void* ServerManager::AcceptLoop(void* delegate)
{
return static_cast<ServerManager*>(delegate)->AcceptLoop();
}

分类:C# 时间:2012-01-01 人气:0
本文关键词: pthreads的
分享到:

相关文章

  • C ++ Pthreads中。 参数给pthread_create的 2012-01-04

    有一对夫妇的事情,我不理解函数pthread_create . 这里是头 int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void*), void *restrict arg); 首先,我不熟悉的语法void *(*start_routine)(void*), . 我知道,问这里的说法是,返回一个函数的名称void * ,并且需要一

  • 钢钉pthreads的内存和cpu 2012-02-21

    我工作在C中的一个项目,需要线程在不同的CPU比最初的进程中运行. 我使用的pthread库创建这些线程. 我用了sched_setaffinity引脚的主进程的CPU. 我可以做同样的每个线程对这些引脚连接到单独的CPU? 我也寄希望于主进程的内存. 创建pthreads的PIN所有使用的pthreads的内存以及或者我需要每个pthread的内再次调用之前|会调用mlockall用于(MCL_FUTURE MCL_CURRENT)? 提前致谢. --------------解决方案-----

  • 在递归调用分段故障对于pthreads 2012-02-28

    考虑下面的代码,我得到一个分段错误,如果我有n> 16运行. 我认为这事做与堆栈,但我不能弄明白. 谁能给我个忙吗? 该代码是不是我的,真的并不重要. 我只是想有人给我一个手发生了什么. 这太问题是非常相似,但没有足够的信息(谁张贴关于这个问题的回答简短会谈的人,但然后继续谈论不同的语言). 此外,请注意,有两个演唱会,没有递归,我可以(如果我做的是正确的)成功创建超过16000线程(虽然OS只会造成约500运行约300). 总之,在这里我在这里,为什么得到赛格故障? 谢谢. #include

  • 没有的pthreads / sempahores,信号Unix进程同步? 2012-03-03

    我试图写一个不使用pthreads的或信号灯库的程序. 我想要做一些信号同步. 我曾在几个Unix的书中读到过他们,但我还是不太明白这一点. 我写了一些模拟程序设计/代码,这不是我的程序,但它给了我是如何试图组织流程/信号的想法. 这看起来像一个合理的解决方案吗? 程序流程: 主叉的随机数的时间,并且在每个子执行时的"程序". 程序分配一个值到子,1或2(例如输入或输出等). 我想一个方法来同步这些孩子. 我想用信号可能是可能的,而且从我读我想要做的事,如: 如果孩子== 1,送父(主

  • Pthreads并且在pthread_join函数的行为 2012-03-07

    我是新来的多线程编程,并有一个关于pthreads的问题. 这是我运行测试代码,我不明白它的行为. 有人可以抛出一些光就可以了吧. void *t1(void *args){ printf("returning from t1\n"); return; } void *t2(void *args){ printf("returning from t2\n"); return; } int main(){ pthread_t thread1,thread2; int

  • 我如何计算运行线程(pthreads的)的数量? 2012-03-25

    如果我搜索计数线程应用程序具有的数量,所有的答案涉及像外部程序top . 我要算在应用程序中的线程. 因为它发生的不可变库内我不能在线程创建点添加代码. 我看不懂/proc . 它是在几个不同的Unices运行的C / pthreads的程序. --------------解决方案------------- 如果您无法读取/proc你有麻烦了一点,除非你的程序与另一个程序其内容沟通/proc 如果你不想读的,因为便携关注的/ proc,您可以使用它抽象化了一下图书馆,像libproc不 你可以写

  • Pthreads并且信号 2012-03-26

    我在与pthreads的一个小麻烦. 基本上,我要赶一个SIGINT并让所有的线程清理和退出. 我有什么(框架代码): main.c中: sig_atomic_t running; void handler(int signal_number) { running = 0; } int main(void) { queue job_queue = new_job_queue(); running = 1; struct sigaction sa; memset(&sa, 0, sizeof(sa

  • Borland的C ++来Cygwin的C ++:TThreads到pthreads的? 2012-03-30

    我工作的一个项目,我需要消除到Borland C ++编译器的所有引用(为什么我这样做是不是问题:)),并已比较成功至今. 不过,我有这个类扩展TThreads,Borland的线程类. 我想用pthreads的,而不是,但我不肯定是否pthreads的可以延长. 如果任何人有关于扩大pthread的类或者甚至从Borland公司转换到非Borland公司我会非常赞赏任何有用的花絮! --------------解决方案------------- 你需要扩展的pthread? 还是你真的只是想周

  • pthreads的,我怎么知道该进程内的另一个线程不会等待? 2012-04-20

    在Linux操作系统上使用pthreads的工作 我有一个永远运行两个工作线程,直到停止变量取值真的,线程终止优雅. 而不是做忙等待的两个线程调用调用pthread_cond_wait,直到新任务的信号通知. 这个制度运作良好. 它要求建立一个"信息"的线程将打印一些调试信息. 该信息线程将尝试这种信息的读取和打印信息每30 seconds.Part,我想是每个工作线程的状态. 是否有可能发现如果一个线程被阻塞在"调用pthread_cond_wait"? 如果线程

  • 2个线程在linux的pthreads之间同步 2012-04-23

    在linux下,怎么能2线(使用pthreads的在Linux上)之间同步? 我想,在某些条件下,一个线程将阻塞本身,然后稍后,这将是恢复由另一个线程. 在Java中,有等待(),通知()函数. 我在找什么东西pthreads的一样: 我看了这一点,但它只有互斥体,这是一种像Java的synchronized关键字. 这不是我所期待的. https://computing.llnl.gov/tutorials/pthreads/#Mutexes 谢谢. --------------解决方案---

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.252 (s). 10 q(s)