C语言怎样实现多线程?c语言中怎样创建多线程
本文目录
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 类的例子
c语言中怎样创建多线程
/*这是我写的最简单的多线程程序,看懂不?*/#include 《windows.h》#include 《stdio.h》//#include 《strsafe.h》DWORD WINAPI ThreadProc1( LPVOID lpParam ) { int i=0,j=0; while(1) { printf("hello,this thread 1 ...\n"); //延时 for(i=0;i《200000000;i++) { ; } }} DWORD WINAPI ThreadProc2( LPVOID lpParam ) { int i=0,j=0; while(1) { printf("hello,this thread 2 ...\n"); //延时 for(i=0;i《200000000;i++) { ; } }} void main(){ int i=0; //创建线程1 CreateThread( NULL, // default security attributes 0, // use default stack size ThreadProc1, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //创建线程2 CreateThread( NULL, // default security attributes 0, // use default stack size ThreadProc2, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //让主线程进入循环,主线程若退出,子线程1,2会被系统“杀死” while(1) { printf("hello,this thread 0 ...\n"); //延时 for(i=0;i《200000000;i++) {;} }}
c语言中怎样创建多线程最好有一个例子,谢谢!!
/*这是我写的最简单的多线程程序,看懂不?*/#include 《windows.h》#include 《stdio.h》//#include 《strsafe.h》DWORD WINAPI ThreadProc1( LPVOID lpParam ) { int i=0,j=0; while(1) { printf("hello,this thread 1 ...\n"); //延时 for(i=0;i《200000000;i++) { ; } }} DWORD WINAPI ThreadProc2( LPVOID lpParam ) { int i=0,j=0; while(1) { printf("hello,this thread 2 ...\n"); //延时 for(i=0;i《200000000;i++) { ; } }} void main(){ int i=0; //创建线程1 CreateThread( NULL, // default security attributes 0, // use default stack size ThreadProc1, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //创建线程2 CreateThread( NULL, // default security attributes 0, // use default stack size ThreadProc2, // thread function NULL, // argument to thread function 0, // use default creation flags NULL); // returns the thread identifier //让主线程进入循环,主线程若退出,子线程1,2会被系统“杀死” while(1) { printf("hello,this thread 0 ...\n"); //延时 for(i=0;i《200000000;i++) {;} }}
C语言能实现多线程么
可以通过调用C语言函数库pthread里的函数,创建多线程。 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。 C语言最初并未设计多线程的机制,随着软硬件的发展及需求的发展,C语言才开发了线程库以支持多线程的操作和应用。
更多文章:
360手机云服务(捡了个360的手机清除手机数据需要先退出云账号怎么办)
2024年7月12日 14:40
台风尼格实时路径(今年第22号台风“尼格”在西北太平洋洋面上生成,会不会登陆有何影响)
2023年8月24日 22:51
iphone6splus和7plus区别(苹果7plus和苹果6s plus的区别是什么)
2024年10月24日 05:10
iphone4s刷机卡基带(苹果手机刷机提示基带读取失败什么原因)
2024年1月28日 05:20
ipad平板电脑忘记密码怎么办(ipad开机密码忘了怎么办 具体解决措施介绍)
2024年6月3日 08:30
oppo reno 6(oppo reno 6属于什么级别)
2024年6月13日 01:35
oppo reno什么时候上市的(opporeno9啥时候上市)
2023年7月10日 06:10
小米青春版10开不了机怎么回事(小米10青春版突然关机开不了机,售后那边就开机)
2024年8月19日 11:10
华为c8500怎么插卡(新买的华为C8500手机,如何选择使用手机内置存储卡)
2024年4月25日 20:50
苹果回应夸大续航(苹果回应iOS15.4正式版太耗电、续航翻车:已经开始调查)
2023年11月26日 01:05
gigaset me(gigaset me pure怎么读)
2024年6月11日 14:37