c语言 两个exe之间通信,C语言中的线程间通信

我有两个线程(应用程序主线程和另一个线程).我正在使用OpenGL绘制一些东西,我正在使用OpenGL键盘和鼠标回调.当我调用glutMainLoop()时OpenGL会阻塞,因为我必须在后台进行一些计算,所以我创建了另一个线程.现在,OpenGL回调应将一些数据(例如,已被按下的鼠标/键的x,y位置)发送到具有临界区的另一个线程.当关键部分正在运行时,不应该接受任何消息,但是我想在关键部分之后处理它们,而不是丢弃这些消息.非OpenGL的类看起来像这样:

void run()

{

for (;;) {

int currentTime = now();

if (now() - previousTime > WAIT_INTERVAL) {

previousTime = currentTime;

tick();

}

}

}

void tick() {

// critical section begins

processor->step()

// critical section ends

}

void receiveMessage(void *data) {

processor->changeSomeData(data);

}

因此,如果从OpenGL线程调用receiveMessage()并且处理器 – > step()正在运行,则应该推迟对changeSomeData()的调用,因为它会弄乱整个计算.

我想使用以下类来同步线程:

Mutex.h:

#ifndef MUTEX_H

#define MUTEX_H

#include

class Mutex;

#include "Lock.h"

class Mutex

{

public:

Mutex();

~Mutex();

private:

void acquire();

void release();

CRITICAL_SECTION criticalSection;

friend class Lock;

};

#endif

Mutex.cpp:

#include "Mutex.h"

Mutex::Mutex()

{

InitializeCriticalSection(&this->criticalSection);

}

Mutex::~Mutex()

{

DeleteCriticalSection(&this->criticalSection);

}

void Mutex::acquire()

{

EnterCriticalSection(&this->criticalSection);

}

void Mutex::release()

{

LeaveCriticalSection(&this->criticalSection);

}

Lock.h:

#ifndef LOCK_H

#define LOCK_H

class Lock;

#include "Mutex.h"

class Lock

{

public:

Lock(Mutex& mutex);

~Lock();

private:

Mutex &mutex;

};

#endif

Lock.cpp

#include "Lock.h"

Lock::Lock(Mutex& mutex) : mutex(mutex)

{

this->mutex.acquire();

}

Lock::~Lock ()

{

this->mutex.release();

}

编辑:

编辑2:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值