有两个线程, 一个负责发送数据, 另外一个线程往第一个线程中写入数据, 然后通知它发送数据。
而第一个线程,就是等着通知, 在被通知唤醒之后就检查有没有数据需要发送, 有则发送, 然后继续睡眠。
这样一个结构很是简单, 但是我总是搞不定, 忘高手写个模型,谢谢。这是一个热门帖子,用java实现的, 不懂java用win32实现,怎么做啊??
//ps:有人说用信号来做,信号到底是什么???? 信号量???? 不是吧
而第一个线程,就是等着通知, 在被通知唤醒之后就检查有没有数据需要发送, 有则发送, 然后继续睡眠。
这样一个结构很是简单, 但是我总是搞不定, 忘高手写个模型,谢谢。这是一个热门帖子,用java实现的, 不懂java用win32实现,怎么做啊??
//ps:有人说用信号来做,信号到底是什么???? 信号量???? 不是吧
解决方案 »
- 调用CView* pView=(CView*)m_wndSplitter.GetPane(0,1)出错误
- 什么时候卸载一个钩子
- 请教GDIPlus如何实现文字光晕
- Splitter控件相关:分割线限制移动范围的问题。多谢。祝大家国庆快乐!
- CHTMLVIEW在新开窗口时怀疑会丢掉cookie,请问怎么解决?
- sdi切分成两个窗口,都是cformview类的派生类。但我新建一个工具栏,响应函数是在view2中。现在程序运行后,如果是鼠标在view1上点击,那个工具栏就没法用了
- 一个简单的问题
- 奇怪的RichEdit
- 请教哪有最新的INSTALLSHIELD的中文版下?
- 如何编程实现 查看dll里面的函数------->的参数!
- 怎么让NTGraph画出的点要有突出的显示(比如给出的数字点比没要求画出来的点要大),或者没要求画出的点不画出来,怎么弄?
- 在网上看到的一段本地进程的API HOOK的代码
#include "CWin32Signal.h"
//Begin section for file CWin32Signal.cpp
//TODO: Add definitions that you want preserved
//End section for file CWin32Signal.cpp
//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
atom::CWin32Signal::CWin32Signal() : handle(NULL)
{
//TODO Auto-generated method stub
#ifdef _WIN32
handle = CreateEvent( NULL, TRUE, TRUE, NULL );
#endif
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
atom::CWin32Signal::CWin32Signal(const char * name) : handle(NULL)
{
//TODO Auto-generated method stub
#ifdef _WIN32
handle = CreateEvent( NULL, TRUE, TRUE, name );
#else
UNREFERENCED_PARAMETER( name );
#endif
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
atom::CWin32Signal::~CWin32Signal()
{
//TODO Auto-generated method stub
#ifdef _WIN32
if( handle ) CloseHandle( handle );
#endif
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
bool atom::CWin32Signal::Reset()
{
//TODO Auto-generated method stub
bool result = false;
#ifdef _WIN32
if( handle ) {
result = ( ResetEvent(handle) == TRUE );
}
#endif
return result;
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
bool atom::CWin32Signal::Awake()
{
//TODO Auto-generated method stub
bool result = false;
#ifdef _WIN32
if( handle ) {
result = ( SetEvent(handle) == TRUE );
}
#endif
return result;
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
bool atom::CWin32Signal::Await(U64 timeout)
{
//TODO Auto-generated method stub
bool result = false;
#ifdef _WIN32
if( handle ) {
WaitForSingleObject( handle, static_cast<DWORD>(timeout) );
result = true;
} #else UNREFERENCED_PARAMETER( timeout );
#endif return result;
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
cupid::CInvokeThread::CInvokeThread() :
CThread("Invoke Dispatcher"),signal("Invoke Service")
{
//TODO Auto-generated method stub
signal.Reset();
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
cupid::CInvokeThread::~CInvokeThread()
{
//TODO Auto-generated method stub
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
bool cupid::CInvokeThread::Awaken()
{
//TODO Auto-generated method stub
return signal.Awaken();
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
void cupid::CInvokeThread::SetActive(bool value)
{
//TODO Auto-generated method stub
active = value;
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
bool cupid::CInvokeThread::GetActive()
{
//TODO Auto-generated method stub
return active;
}//@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
unsigned int cupid::CInvokeThread::Run()
{
//TODO Auto-generated method stub CMilisecondTimer timer;
unsigned long elapse = 0; for(;;)
{
timer.Record(); // working...... // 如果不再有效,则终止循环
if( GetActive() == false ) break; elapse = timer.GetElapsedTime(); // 休眠
if( elapse < 5 )
{
signal.Reset();
signal.Wait( 5 - elapse );
}
}
return 0;
}外部线程调用Awake即可。