西电人工智能操作系统实验作业(2024)
引言

西电人工智能操作系统(院选)的实验作业,一开始发的两个实验都要写,后面改成一个,我写的的一个:第2章 Windows的进程管理,word报告长这样,你们这届如果还是一样的话(我觉得肯定一样,跟祖传ppt一个德行)可以参考一下。

环境配置
下载编辑器(Visual Studio)和编译环境(MinGW),自己上网找教程去。
!!!注意:在安装工作负荷里的使用C++的桌面开发时,在右侧的安装详细信息里记得勾上:适用于最新v1xx生成工具的C++MFC。这个库你不装代码是跑不起来的!!!

现在开始讲跟作业相关的内容:
如何运行cpp文件
如果你直接打开.cpp文件,会发现运行不了,要是之前用过Visual Studio应该知道打开.sln文件才能运行。给不知道的讲一下:
1.打开Visual Studio,选择创建新项目。

选择C++的空项目,点击下一步。

项目名称自定,四步实验一共会需要创建五个(最后一个两个),位置跟代码放一块,方便找和写完删(buhsi),最好放在同一目录,点击创建。

下面以实验一为例,其他以此类推,特殊情况会说明。
实验一:线程的创建与撤消
打开后,看向右边的解决方案资源管理器,鼠标放在源文件上,右击,选择添加现有项。

找到2.1 实验一:线程的创建与撤消->ThreadCreate->ThreadCreate.cpp,点击添加。

双击你添加的ThreadCreate.cpp,这样就算是做完了准备工作。

好,接下来开始解决各种问题。
不得不吐槽,这代码老到飞起(零几年的代码),我在搞的时候80%时间都是在发现问题,解决问题。除了祖传ppt,这实验作业也是不知道从国外哪翻来的用这么多年。
接下来你点击运行,不出意外就会报错,让我们一个一个解决。
首先一个非常致命的报错,会贯穿所有的实验:
#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
需要按以下步骤解决:
鼠标放在ThreadCreate.cpp上右击,打开属性(最后一个)。配置属性->C/C++->代码生成->运行库->多线程DLL(/MT),点应用再点确定。

如果解决方案这里是Debug,改成Relase。

解决该问题。
第二个问题,将ThreadName1()函数中,While循环中的m++改成i++。原本的代码会导致程序死循环(能有这种问题真的是有了)

其他问题不影响程序运行,不用管,运行结果如下

实验二:线程的同步
新建项目run_2,添加已有项Semaphore.cpp(同上)
改解决方案和运行库(同上)
这个代码没什么问题。直接运行得结果。(没给结果截图是希望你们还是能直接跑一下,把坑都给你们指出来了只是运行程序很快的,也感受一下线程的一系列操作)
实验三:线程的互斥
新建项目run_3,添加已有项Mutex.cpp(同上)
改解决方案和运行库(同上)
将所有_sleep改成Sleep,因为_sleep是C里的,C++中要改成Sleep。
如果有报错:“count”: 不明确的符号,表示编译器无法识别或无法正确访问到count变量。就把func1和func2中所有count改成::count,来明确指定全局变量的作用域。

运行,出结果。count in fnuc1=6,count in func2=7.
实验四:使用命名管道实现进程通信
这个实验里有两个文件夹,PipeClient和PipeServer。所以创建run_4和run_5,分别打开两个文件的cpp,改解决方案和运行库。(不要试图一个解决方案打开两个cpp,会出现各种各样的问题的,感兴趣可以试试捏)
两个代码(PipeClient.cpp和PipeServer.cpp)都作以下修改:
把char IpName[]="\\.\pipe\MyNamedPipe";改成
wchar_t lpName[] = L"\\\\.\\pipe\\myPipe";

两个strcpy和一个scanf那三行改成
strcpy_s(InBuffer, sizeof(InBuffer), "");
strcpy_s(OutBuffer, sizeof(OutBuffer), "");
scanf_s("%s",InBuffer, (unsigned int)sizeof(InBuffer));

运行程序我要说一下,两个程序都要运行。只有PipeServer.cpp运行后,PipeClient.cpp里输入数据才不会弹Wait Pipe Fail!err=2。两个都正确运行后,即可看到两个命令窗口的数据通讯。
最后
不敢保证你不会遇到上面提到之外的问题,请善用互联网和大模型解决其他问题。我也是写完后感慨问题真**多后才一时兴起写的文章,有所遗漏在所难免,希望能帮到学弟学妹们。再有什么问题评论或者私聊吧,虽然我大概率不会及时看到(还得靠自己
学无止境!我在嘻癫等你(发疯)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)