Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于线程间通信的Windows套接字_C++_Multithreading_Sockets_Synchronization_Winsockets - Fatal编程技术网

C++ 用于线程间通信的Windows套接字

C++ 用于线程间通信的Windows套接字,c++,multithreading,sockets,synchronization,winsockets,C++,Multithreading,Sockets,Synchronization,Winsockets,我有一个线程等待阻塞调用(通过select),并希望它同时与父线程通信。因为,当父对象向它发送消息时,它可能参与阻塞调用,所以我不能使用WaitForMultipleObjects。我想知道是否可以在子线程和父线程之间使用套接字,但所有文献都表明,套接字最好用于进程间通信,而不是线程间通信。同时,我也没有找到它们不适合我的用例的原因。是否有我可能遗漏的任何东西,或者对于这样的用例是否有其他解决方案。(寻找基于C++的解决方案)为代码选择< /COD>并在循环中运行,这样您就可以通过内存周期性地与

我有一个线程等待阻塞调用(通过select),并希望它同时与父线程通信。因为,当父对象向它发送消息时,它可能参与阻塞调用,所以我不能使用WaitForMultipleObjects。我想知道是否可以在子线程和父线程之间使用套接字,但所有文献都表明,套接字最好用于进程间通信,而不是线程间通信。同时,我也没有找到它们不适合我的用例的原因。是否有我可能遗漏的任何东西,或者对于这样的用例是否有其他解决方案。(寻找基于C++的解决方案)

为代码<设置超时>选择< /COD>并在循环中运行,这样您就可以通过内存周期性地与父线程通信。


或者在单独的第三个线程中运行select,并在第二个线程中使用
std::condition_变量
以循环或其他方式超时等待它,同时还能够与父线程通信。

设置超时,选择
并在循环中运行它,以便可以通过内存定期与父线程通信

或者在单独的第三个线程中运行select,并在第二个线程中使用
std::condition_变量
在循环中超时或其他方式等待它,同时也能够与父线程通信

想知道我是否可以在子线程和父线程之间使用套接字

对。你可以

但所有文献都表明,套接字最好用于进程间通信

选择在一个进程中使用多个线程而不是使用多个进程来实现应用程序的主要原因(可能是唯一原因)是线程可以通过共享内存彼此通信。这可以简化应用程序的设计,因为数据不必编组、通过管道发送和在另一端取消编组

想知道我是否可以在子线程和父线程之间使用套接字

对。你可以

但所有文献都表明,套接字最好用于进程间通信

选择在一个进程中使用多个线程而不是使用多个进程来实现应用程序的主要原因(可能是唯一原因)是线程可以通过共享内存彼此通信。这可以简化应用程序的设计,因为数据不必编组、通过管道发送和在另一端取消编组

我有一个线程等待阻塞调用(通过select),并希望它同时与父线程通信。因为,当父对象向它发送消息时,它可能参与阻塞调用,所以我不能使用WaitForMultipleObjects

不能使用
WaitForMultipleObjects()
等待
套接字
句柄

但是,如果使用
WSAEventSelect()
而不是
select()
等待套接字操作,则可以使用
WaitForMultipleObjects()
wswaitformultipleevents()
与其他Win32对象(如事件对象、管道等)同时等待套接字事件

或者,如果可以使用
PostThreadMessage()
在线程之间发布消息,则可以使用

否则,您只需在短时间内调用
select()
,然后根据需要在调用
select()
之间检查线程间通信

我想知道是否可以在子线程和父线程之间使用套接字

从技术上讲是的,但这样做不是很有好处。线程之间有更有效的通信方式

所有文献都表明,套接字最好用于进程间通信,而不是线程间通信

这是正确的

我有一个线程等待阻塞调用(通过select),并希望它同时与父线程通信。因为,当父对象向它发送消息时,它可能参与阻塞调用,所以我不能使用WaitForMultipleObjects

不能使用
WaitForMultipleObjects()
等待
套接字
句柄

但是,如果使用
WSAEventSelect()
而不是
select()
等待套接字操作,则可以使用
WaitForMultipleObjects()
wswaitformultipleevents()
与其他Win32对象(如事件对象、管道等)同时等待套接字事件

或者,如果可以使用
PostThreadMessage()
在线程之间发布消息,则可以使用

否则,您只需在短时间内调用
select()
,然后根据需要在调用
select()
之间检查线程间通信

我想知道是否可以在子线程和父线程之间使用套接字

从技术上讲是的,但这样做不是很有好处。线程之间有更有效的通信方式

所有文献都表明,套接字最好用于进程间通信,而不是线程间通信


这是正确的。

您是否尝试过使用for waiting,以便在需要时从父线程唤醒该线程?就父线程而言,等待select的线程不会处于休眠状态,因此我怀疑它是否有效。谢谢你的建议!您是否尝试过使用for waiting,以便在需要时从父线程唤醒该线程?就父线程而言,等待select的线程不会处于休眠状态,因此我怀疑它是否有效。谢谢你的建议!另外,我不太了解WinAPI线程,但在许多线程系统中,线程之间没有父/子关系。这可能有助于您将它们视为父级和子级,但线程库本身可能并不关心是哪一个创建了另一个。另外,我对WinAPI thr了解不多