当前位置:  技术问答>linux和unix

100分求解:将这个C语言写的线程程序改写成C++程序

    来源: 互联网  发布时间:2015-01-27

    本文导语:  源C程序 #include  #include  #include  #include  void *thread_function(void *arg); char message[]="Hello World"; int main()     {       int res;       pthread_t a_thread;       void *thread_result;       res=pthread_create(&a_thread,NULL,threa...

源C程序
#include 
#include 
#include 
#include 
void *thread_function(void *arg);
char message[]="Hello World";
int main()
    {
      int res;
      pthread_t a_thread;
      void *thread_result;
      res=pthread_create(&a_thread,NULL,thread_function,(void *)message);
      if(res!=0)
{
  perror("Thread creation failed");
  exit(EXIT_FAILURE);
}
      printf("Waiting for thread to finish...n");
      res=pthread_join(a_thread,&thread_result);
      if(res!=0)
{
  perror("Thread join failed");
  exit(EXIT_FAILURE);
}
      printf("Thread joined,it returned %sn",(char *)thread_result);
      printf("Message is now %sn",message);
      exit(EXIT_SUCCESS);
}
void *thread_function(void *arg)
{
      printf("thread_function is running.Argument was %sn",arg);
      sleep(3);
      strcpy(message,"bye!");
      pthread_exit("Thank you for the CPU time");
}

我改写的程序,但编译不通过。
test.h:

#ifndef __TEST_H__
#define __TEST_H__
#include 
#include 
#include 
#include 
#include 
class test
{
 public:

  int res;
  pthread_t a_thread;
  void *thread_result;
  char message[10];
  void *thread_function(void *arg);
  int start();
};
#endif

test.cpp:

#include "Serial1.h"
main()
{
test main;
main.start();
}

int test::start()
{
  char a[]="Hello World";
  strcpy(message,a);
  res=pthread_create(&a_thread,NULL,thread_function,(void *)message);
      if(res!=0)
{
  perror("Thread creation failed");
  exit(EXIT_FAILURE);
}
      printf("Waiting for thread to finish...n");
      res=pthread_join(a_thread,&thread_result);
      if(res!=0)
{
  perror("Thread join failed");
  exit(EXIT_FAILURE);
}
      printf("Thread joined,it returned %sn",(char *)thread_result);

      printf("Message is now %sn",(char *)message);
      exit(EXIT_SUCCESS);

}
void * test::thread_function(void *arg)
{
printf("thread_function is running.Argument was %sn",arg);
sleep(3);
strcpy((char *)arg,"bye!");
pthread_exit(arg);
}

请大家帮忙修改,指点!!

|
因为pthread_create()不是class test的成员函数也不是友元函数。当将class test的成员函数thread_function()以传址方式传递给pthread_create()时,因为pthread_create()无法直接访问class test成员函数,将会出现访问权限错误。加上static后,因为static以面向对象来理解,在某个class中以static修饰的成员都将作为类直接成员,即不再只是类实例(instance)成员处理,这时的类成员跟结构体(struct)中的成员非常相似,就可以以“类名::成员”的方式,以类似全局作用域的方式进行访问。因此就不会出现访问权限错误。

|
在test的申明中, 把void *thread_function(void *arg); 改为
static void *thread_function(void *arg); 就可以了

    
 
 

您可能感兴趣的文章:

  • C++编写FTP客户端解析LIST命令获取目录不完整,求解。
  • C++实现二叉树遍历序列的求解方法
  • C++实现第K顺序统计量的求解方法
  • 哪里能够下载到针对InterBase的第三类的JDBC驱动程序InterClient?高分求解......
  • 求解:为什么我写的Java程序不能显示中文。
  • 高分求解:如何设置程序的用户和组
  • 【一个关于Linux/Unix程序开发的问题,很久了,没有人解决】 ---------UP有分,高分求解
  • (菜鸟飞飞)求解释一段程序
  • 高分求解,怎样有APPLET打开服务器上的文件,最好有原程序。为什么没人理我??????
  • 简单的驱动程序问题,求解释
  • linux下,用g++编译一个qt程序,然后提示了一个错误,求解!
  • 求解:书上一个例子有一条语句不理解(附程序)在线等待…………
  • TCP服务端程序意外重启后,客户端连接不上的问题求解
  • 求解linux源码中的这段SCTP程序
  • linux下管道程序求解
  • $$$高分求解,关于带_start函数的原程序的问题
  • 200分求解:程序中同时用到共享库(.so)、静态库(.a),编译时gcc的参数该如何设置?
  • 求解:书上一个例子有一条语句不理解(附程序),欢迎讨论、在线等待…………
  • 一个关于IPC的程序所产生的疑问。。。求解
  • ubuntu下的c程序,关于无连接套接字通信的,求解!
  • 模拟聊天室程序//三点问题,附带注释,求解?
  • 【高分求解】 请帮帮忙,修改这个UNIX shell程序 【UP有分】 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  • 〖高分求解〗★★★★★【C语言,用UNIX的 Semaphore 写并发程序.---测试素数】★★★★★〖up有分〗
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求解 求解 求解
  • Linux Shell编程从初学到精通 第四章课后习题2 求解
  • 有限元求解器 GetDP
  • 偏微分方程求解工具箱 DUNE
  • linux命令求解释....
  • 偏微分方程求解框架 Overture
  • 100分求解!!!!!
  • 编译内核时候出现的问题,求解
  • makefile求解
  • 求解ucos ii的一句代码
  • 求助linux下mysql 求解!
  • 求解啊,centos下 shutdown -h now 无效??
  • 求解windows下硬盘安装linux如何用linux引导
  • 关于linux shell的一个不明白的地方。求解
  • solaris安装不上,求解.............
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • ubuntu12.04求解
  • 100分求解如何查看内存最高使用值!!
  • 高分求解---如何在DOS下查杀欢乐时光病毒?用哪种杀毒软件?Windows98没法进入了!
  • 求解struct的大小


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3