我正在编写一个网络测试程序。 这个想法是有两个线程。客户端和服务器。 我想在2个线程之间添加一些事件。
Basicly
主线程运行服务器并为客户端创建新线程。
服务器线程等待客户端连接。
客户端线程发送一些数据并通知服务器线程。
客户端线程等待。
服务器读取数据。检查数据是否完整,并通知客户端线程发送更多数据。
循环重复多次,但服务器不知道多少次。
发送完所有数据后,客户端线程会通知服务器线程退出其循环。服务器线程(主线程加入客户端线程。)
我使用全局std :: condition_variable和全局变量实现了它,并且它可以工作。我正在编写多个这些测试函数。每个测试函数都执行我上面描述的但具有不同数据的功能。
以下是我的一些问题:
我找到了std :: promise和std :: future。我喜欢它等待在另一个线程中设置值的事实。我可以使用它代替std :: condition_variable吗?通常,在等待设置变量时,使用一种方法而不是另一种方法的用例是什么?差异,优点/缺点?
在每个测试函数中本地声明std :: condition_variable和变量并将引用传递给线程而不是使用全局变量会更好吗?出于某种原因,我不喜欢使用全局变量。什么是更好的做法?
如果你确定它会在主线程之前结束,你是否需要加入一个线程?我的客户端线程在完成发送时通知服务器线程(主线程)并将退出,所以服务器线程确实在等待客户端线程退出。我还需要在主线程中加入吗?