QQ网名大全

C语言怎样实现多线程?

首先你要有控制蛇移动方向的全局变量(定义在main以外因为线程函数也要调用它,每次键盘输入都会修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然后你在移动时应该是在while里面操作的吧,你每移动一步前都读一下direction这个变量的数值然后再控制移动方向(注意s这个键可以忽略因为不会倒着走) 然后你可以用pthread.h这个库 例子是 pthread t;// 定义一个线程 pthread_create(&t, null, listen_keyboard_input, null);//建立线程执行listen_keyboard_input这个函数 这个线程执行的函数 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ direction =getchar(); } } 但是这里存在同步问题, 比如当这个线程的getchar()在给direction辅助的同时,你控制贪吃蛇移动的线程正在调用 direction的值来判断下一个移动方向,这就会出问题,所以要加一个锁,叫 mutex lock;这个也定义成全局变量可以使各线程共享。 pthread_mutex_t mutex; //定义一个锁 pthread_mutex_init(&mutex, null, null);//初始化 然后把函数修改成 void listen_keyboard_input(){ while(应该通过某个信号来退出这个循环,从而表示游戏结束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一个控制贪吃蛇移动的时候也要加锁 while(.....){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ ................ } ................................... } 这样就好了 注意你的控制贪吃蛇移动的部分也必须要放在另外一个pthread 里面执行,如果放在主线程, 主线程会一直等listen_keyboard_input而什么事都不会做 你把这两个线程用 pthread_create 创建完成后 用 t1.join(); t2.join(); 就可以使这两个线程并发执行了 如果你用的是linux 来编译的,你再输入gcc 指令后加上 -lpthread 就可以了 还有什么不懂的你可以多找找 pthread 类的例子
佚名
2024-11-15 15:07:03
最佳回答
类似问题(10)
  • 佚名
    2024-11-15 13:08:10

    求c#多线程实例

    Thread th=new Thread(new ThreadStart(方法));th.Name="aa" 为线程命名th.Priority=ThreadPr...

  • 佚名
    2024-11-15 01:54:24

    c语言中怎样创建多线程。最好有一个例子,谢谢!!

    /*这是我写的最简单的多线程程序,看懂不?*/#include <windows.h>#include <stdio.h>//#include &l...

  • 佚名
    2024-11-15 10:53:52

    C语言怎么实现一个线程通过队列向另一个线程发送数据

    线程是共享全局变量的,你只要定义一个全局的队列类型的变量而分别在一个线程中更改其中的值,另外一个线程直接读队列就好,不过记得要在对队列操作时设置lock或者se...

  • 佚名
    2024-11-15 13:14:55

    C语言中的线程?

    给你推荐一些比较好的教程吧,你应该用得着: 漫谈C++ Builder多线程编程技术: http:///html/xueyuan/chengxukaifa/...

  • 佚名
    2024-11-15 10:10:56

    qt环境怎么用c语言写多线程

    没必要用C语言,直接用Qthread.如果用C语言写的话就用不到QT的platform dependence了。就不用QT就可以了。如果必须要用的话linux ...

  • 佚名
    2024-11-15 00:26:03

    C语言多线程线程同步可以干什么

    线程同步比如你要操作大量数据,再有界面的情况下会卡住,实际上是在运行的,但是你会以为它卡死了,线程同步就是解决这类问题,让操作量大的工作交给一个线程,界面的显示...

  • 佚名
    2024-11-15 20:10:00

    c语言多线程

    main(){if(!fork()) { //代码 //...新线程,与原线程共享数据空间 }else { //代码 //..原线...

  • 佚名
    2024-11-15 05:52:31

    c 多线程 问题

    这还不简单,是没有解决同步的问题。 操作系统执行指令是由时间片组成的。你那个变量i,又没有规定只能一个人访问。第一个线程执行了,i=0,时间片到了,轮到第二个线...

  • 佚名
    2024-11-15 00:47:58

    线程池的C++11版本实现问题

    因为你没有贴上全部代码,也很难看出来看一下这个C++11的thread pool怎么样?#ifndef THREAD_POOL_H    #define THR...

  • 佚名
    2024-11-15 13:39:12

    C语言如何使用线程池中的某个线程

    问别人问题,还这么牛叉,真心佩服不要给线程派任务,让线程空闲的时候,自己去领任务