Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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++ 在win32中执行线程的步骤_C++_Multithreading_Winapi - Fatal编程技术网

C++ 在win32中执行线程的步骤

C++ 在win32中执行线程的步骤,c++,multithreading,winapi,C++,Multithreading,Winapi,我有两个函数,我需要并行运行它们,所以我在主函数中为它们创建了线程。代码如下所示: int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { ...... _beginthread(ModbusRead,0,(void*)12); _beginthread(ModbusWrite,0,(void*)10); } 这两个功能是Modbu

我有两个函数,我需要并行运行它们,所以我在主函数中为它们创建了线程。代码如下所示:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
......

     _beginthread(ModbusRead,0,(void*)12); 
     _beginthread(ModbusWrite,0,(void*)10);
}
这两个功能是ModbusRead和ModbusWrite

我在代码中只实现了这两行线程,它们在主函数的主线程之外并行运行这两个函数

假设函数ModbusRead在thread1中,modbusrite在thread2中。我必须做以下事情

function ModbusWrite(thread2)
{
     if (condition1 true)
     {
         Pause thread1(donot run function ModbusRead)

         if(condition2 true)
               {
                   resume thread1(restart function ModbusRead)
               }
     }
}

由于我是线程新手,我一直在犹豫我的线程实现是否正确,以及如何满足上述条件

Thread1必须是一个循环,每次通过其循环检查事件。未设置事件时,线程将挂起WaitForSingleObject

while (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, INFINITE))
{
   ...do some thread work
}
其他线程最初使用CreateEvent,然后使用SetEvent或ResetEvent来恢复/暂停thread1。线程不会立即暂停:仅当其循环返回WaitForSingleObject时

while (WAIT_OBJECT_0 == WaitForSingleObject(hEvent, INFINITE))
{
   ...do some thread work
}

实际上,您可能还需要一种方法来通知线程何时应该退出。这可以通过使用WaitForMultipleObjects来实现,一个事件用于恢复/暂停,另一个事件用于退出。

看起来您需要互斥或某种事件/信号。像这样的线程间通信是一个相当复杂的问题,在本文中可能无法充分解释,因为它需要仔细设计以避免死锁和其他问题。您可以尝试参考MSDN文档中关于同步的内容:这是同一个问题吗?是的,是一个类似的问题。。只是尝试不同的方式,我无法粘贴代码,所以我创建了另一个更详细的问题