PDA

View Full Version : دریافت از پورت سریال در MFC



AliBahar
دوشنبه 04 آبان 1394, 12:13 عصر
سلام
من یک برنامه MFC دیالوگ محور ایجاد کردم می خوام هر وقت کاراکتری از پورت سریال COM1 دریافت شد برنامه وارد یک رویداد بشه و یک سری توابع رو اجرا کنه. مشکل من اینه که چه جوری موقع دریافت کاراکتر از COM1 یک رویداد ایجاد کنم. مورد فورس ماژوری هم هست لطفا کمک کنید:متفکر:.

ali chegini
سه شنبه 05 آبان 1394, 21:43 عصر
سلام. لطفا لینک های زیر رو ببین.
http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio/overview/serial_ports.html
http://www.naughter.com/serialport.html

AliBahar
چهارشنبه 06 آبان 1394, 08:53 صبح
سلام ممنون از این که جواب دادی. اما مشکل من هندل کردن پورت کام نیست. مشکل ایجاد رویداده. توی win32 میدونم چیکار باید بکنم با MFC بلد نیستم. شما وقتی با MFC کار میکنی هموطور که احتمالا میدونی تابع main پنهان میشه (که اگه پنهان نبود مشکل من حل میشد: توی یک حلقه while به صورت مداوم پورت کام رو میخوندم) با MFC تنها کاری که میشه کرد اینه که یک رویداد ایجاد کنم که به محض دریافت از پورت کام خودش بره یکسری توابع رو اجرا کنه.

ali chegini
پنج شنبه 07 آبان 1394, 01:33 صبح
سلام . چند تا راه وجود داره :
1- از یک thread استفاده کنی (پیشنهاد می کنم این کار رو بکنی).
2- از تایمر استفاده کنی ( پیشنهاد میکنم این کار رو نکنی ).
3- اگر به خوای از روشی که تو win32 باهاش آشنایی داریی استفاده کنی به صورت زیر باید عمل کنی :
تابع run رو Override کنی به صورت زیر : و تو این لینک توضیحات داده :
http://www.gamedev.net/topic/275216-where-is-message-loop-in-mfc-application/


// Interface
class CDummyApp : public CWinApp
{
public:

CDummyApp( void ) { }
virtual ~CDumyApp( void ) { }

virtual BOOL InitInstance( void );
virtual int Run( void );
virtual int ExitInstance( void );

protected:

DECLARE_MESSAGE_MAP( )
};

// Implementation

CDummyApp theApp; // Global application instance

BOOL CDummyApp::InitInstance( void )
{
// init stuff
}

int CDummyApp::Run( )
{
MSG msg;
BOOL bGotMsg;

PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE );

while ( WM_QUIT != msg.message )
{
if ( /* window is active */ )
{
bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 );
}
else
{
bGotMsg = ( GetMessage( &msg, NULL, 0U, 0U ) != 0 );
}

if ( bGotMsg )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
// TODO : Put code here that perform normal logial routines
}
}

return ( int )msg.wParam;
}

int CDummyApp::ExitInstance( )
{
// Release uses resources

return CWinApp::ExitInstance( );
}

(http://www.gamedev.net/topic/275216-where-is-message-loop-in-mfc-application/)