首页 \ 问答 \ 在C中创建线程(Threads creation in C)

在C中创建线程(Threads creation in C)

void print_hello_world() {
    pid_t pid = getpid();
    printf("Hello world %d\n", pid);
    pthread_exit(0);
}

void main() {
    pthread_t thread;
    pthread_create(&thread, NULL, (void *) &print_hello_world, NULL);
    print_hello_world();
}

我真的不明白pthread_create中的(void *)需要什么。 我们是否需要“&print_hello_world”或者可以放下“&”,因为我已经在某处传递函数指针,而我们不需要在函数名称前放置“&”。


void print_hello_world() {
    pid_t pid = getpid();
    printf("Hello world %d\n", pid);
    pthread_exit(0);
}

void main() {
    pthread_t thread;
    pthread_create(&thread, NULL, (void *) &print_hello_world, NULL);
    print_hello_world();
}

I really couldn't understand what is the need of (void *) in pthread_create. And do we need "&print_hello_world" in the same or could drop "&" as I have read somewhere that while passing function pointers we don't need to place "&" before the function name.


原文:https://stackoverflow.com/questions/31810161
更新时间:2023-09-16 20:09

最满意答案

我找到了答案:

int viewport[4]; 
// get matrixs and viewport:
glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); 
glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); 
glGetIntegerv( GL_VIEWPORT, viewport ); 
gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 
0.0, matModelView, matProjection, viewport,  
&camera_pos[0],&camera_pos[1],&camera_pos[2]);

这将为您提供场景中摄像机的坐标。


I found the answer for this :

int viewport[4]; 
// get matrixs and viewport:
glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); 
glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); 
glGetIntegerv( GL_VIEWPORT, viewport ); 
gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 
0.0, matModelView, matProjection, viewport,  
&camera_pos[0],&camera_pos[1],&camera_pos[2]);

this will give you the coordinates of the camera in the scene.

相关问答

更多
  • mDirectVideo = new DirectVideo(texture); texture = createTexture(); 应该 texture = createTexture(); mDirectVideo = new DirectVideo(texture); 着色器 private final String vertexShaderCode = "attribute vec4 position;" + "attribute vec2 inputTextu ...
  • 你好像错了一个副词: Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); 代替: Front.x = cos(convertToRads(yaw)) * cos(convertToRads(pitch)); It seems you have misplaced a paranthesis: Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); instea ...
  • 我认为这是一个惯例问题。 例如,当你的鼻子向上时,俯仰角是正的还是在你俯冲时是正的? 这两种方法都可以正常工作,您可能只需要根据您选择的惯例来否定角度。 在现实世界中,我一直在争论“倾角”和“方位角”对地质学家的意义,似乎在地质学界没有固定的惯例。 看来您的Lloyd Goodall参考不会否定glTranslatef()调用中的摄像头位置。 又一个惯例? 要回答为什么他们选择代码风格的问题......我认为它有点随意,所以作者只会以某种方式做到这一点。 I would suggest that it's ...
  • 你有一些简单的选择: 通过调用XMMatrixInverse或D3DXMatrixInverse来反转视图矩阵,以便获得“CameraWorld”矩阵。 然后它的(_41,_42,_43)元素将是位置向量。 反转视图矩阵(例如上次)但不是读出roe,而是使用XMMatrixDecompose或D3DXMatrixDecompose来获取摄像机位置和方向。 一个好主意是在程序存储器中同时具有View和InvView矩阵,以便快速访问这些信息:矩阵求逆在计算上非常昂贵。 视图矩阵只是摄像机世界矩阵的逆变换(只是 ...
  • 在使用gluLookAt之前,需要加载单位矩阵(或在SetMatrices设置的其他一些规范矩阵), gluLookAt将新矩阵与现有的模型视图矩阵相乘。 或者你可以使用push和pop矩阵的工作方式: 设置你的矩阵 推模型视图矩阵 看看随机位置 渲染场景到纹理 弹出模型视图矩阵 看原始位置(可能没有必要) 渲染你的四边形 You need to load the identity matrix, (or some other canonical matrix which you set up in Set ...
  • 让我向您介绍一种称为“矩阵”的东西: float matrix[16]; 矩阵是一个简单的数组,用于以一个整齐的包中存储所有四个向量,采用OpenGL理解的格式。 您可以按以下方式将矢量存储在矩阵中: matrix[0] = getAxisX().getX(); matrix[1] = getAxisX().getY(); matrix[2] = getAxisX().getZ(); matrix[3] = 0.0; matrix[4] = getAxisY().getX(); matrix[5] = ...
  • 您应该将uniform vec3 camera_location传递给着色器 You should pass a uniform vec3 camera_location to the shader
  • 为了简单起见,我假设矩阵只包含旋转,平移和均匀缩放的组合。 一般变换矩阵可以表示其他类型的翻译,如: 非均匀缩放。 剪切变换。 旋转和缩放位于矩阵的左上角3x3部分,即每个方向上索引为0至3的元素。 如果没有缩放,则此3x3矩阵的每个行向量的长度为1.0。 如果存在缩放,则可以通过计算任何这些行向量的长度来计算缩放因子: scalingFactor = sqrt(m00 * m00 + m01 * m01 + m02 * m02); 然后通过将3×3子矩阵的所有元素除以缩放因子来获得旋转矩阵: ...
  • 相机的模型转换将是 M = T * R 由于View转换是反向的,所以这是 V = R^-1 * T^-1 这意味着整体旋转包含旋转的平移向量。 你必须从点积计算它: translation.x = -dot(position, right vector) translation.y = -dot(position, up vector) translation.z = -dot(position, direction vector) 您可以从矩阵中检索这些向量。 它们位于前三列/行中。 The mo ...
  • 我找到了答案: int viewport[4]; // get matrixs and viewport: glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); glGetIntegerv( GL_VIEWPORT, viewport ); gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[ ...

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)