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语言才开发了线程库以支持多线程的操作和应用。
更多文章:
雪铁龙天逸音响怎么调才算最佳模式?雪铁龙天逸音响主机加装DSP不启动
2024年5月15日 17:03
华硕k43sd笔记本电脑参数(这款华硕K43SD内存最大能扩展到多大)
2023年4月28日 08:15
联想y470电源适配器黄灯闪烁(联想y470不能充电,电源适配器闪烁)
2024年7月8日 08:34
gtx590显卡怎么样(GTX 960 和 GTX670 GTX 590 相比哪个好)
2024年9月19日 05:30
ideapad y471(联想ideapady471a 为什么一直闪黄灯 开不了机)
2024年6月9日 13:55
2000左右一体机电脑推荐(先买台台式或一体机电脑,2000多左右~有什么推荐,能运行英雄联盟等游戏流畅的)
2023年12月30日 07:55
联想y450触摸板(联想Y450玩时间长了触摸板两边就会发热,是怎么回事)
2024年7月21日 16:37
台式机500w电源够用吗(500W电源能不能带起我电脑的这些配置)
2023年7月25日 22:20
中关村手机性能排行榜(现在什么智能手机最好 打算买手机呢~求推荐!)
2023年12月9日 20:20
富士通笔记本如何用u盘重装系统(富士通的电脑,要重装系统,有老毛桃,不知道怎么进U盘)
2024年7月7日 02:08
gtx750ti能玩战地1吗(我把显卡换成gtx750ti能玩战地1么)
2024年7月1日 21:46
联想y550参数(联想Y550与V500的顶级本哪款比较好)
2024年11月9日 20:30
2千多的笔记本电脑买什么牌子好(想买二千元笔记本电脑有什么牌子最好)
2024年5月21日 03:22