前沿:
我在《TCP/IP编程——多线程+非阻塞的服务实现》有提到创建多线程的函数是_beginthreadex(),但是其实它是调用了windows直接与内核操作的接口CreateThread(),下面我们就来看看这两个有说明不同。
补充:
_beginthreadex()函数与CreateThread()函数的区别。
_beginthreadex()最终还是会调用CreateThread()
但是windows用_beginthreadex()封装之后,安全性更高,因为这样就避免了多个线程调用标准C运行库的时候对用一个全局变量操作导致代码错误运行的问题,——每个线程都将拥有自己专用的一块内存区域来供标准C运行库中所有有需要的函数使用。而且这块内存区域的创建就是由C/C++运行库函数_beginthreadex()来负责的。
VS中的问题:无法从“const char [4]”转换为“LPCWSTR”
复制过来的代码经常容易发生这种错误,貌似是因为编码方式的不同导致的错误,需要在赋值的时候在双引号前加L
但是最好的做法是以后在程序里用_T("string");对LPCWSTR的变量赋值。
正文:
我们在《TCP/IP编程——多线程+非阻塞的服务实现》虽然讲了多线程,但是线程之间是独立的,但是一般我们总会遇到种种的线程之间的关系,所以衍生出了多种多样的防止出错的线程协调的方法,今天我们来讲讲如何对文件进行操作最后利用TCP收发同时在服务器端多线程同步调度,完成TCPIP的第二份作业。
1. 编写TCP服务器,接收远程客户端发送的数据(视频文件);
2. 接收线程将接收到的数据存入缓存区;
3. 另一线程从缓存区中取出数据存入文件,保证线程之间的同步;
4. 要保证存入文件后打开可以正常播放视频文件;
5. 如能实现直接播放视频(加分)。
如何操作文件:
详情请参考网上的说明——C/C++ 文件设备操作之CreateFile、ReadFile和WriteFile / 使用CreateFile读写文件 /,这里只给出demo
writefile的demo
#include <stdio.h>
#include <windows.h>
int main()
{
HANDLE hFILE = CreateF