|
Yes, you can use one thread to wait for a connection, and spawn a new thread for every connection received.
There are some good thread pool articles and thread articles around here on CP..
I also got the blogging virus..[^]
|
|
|
|
|
Yeah, I was already looking for those tutorials. But most articles come up with their own class. And the others work with the MFC. I couldnt find an article that fits my wishes, therefor I am here.
I have to look once again!
So, the best way is the following:
Create a thread that accepts incoming connections
This one creates a new thread for each connected client, who will handle his stuff, like sending and receiving data.
Is that correct?
DKT
|
|
|
|
|
Yes that is the easy way to go. It is not bad if your chat server doesn't have a high load and very many connections.
If you do have a high load chat server, you can start a few threads that handle work asynchronously. That is more complex though.
This[^] CThread class by Dominik Filipp is a very nice one.
I also got the blogging virus..[^]
|
|
|
|
|
Hi again,
I have one problem: If I want to create a thread, I cant add params to the thread function. But thats what I need, at least to pass the HWND of my Dialogbox. Is there no way to implement that?
DKT
|
|
|
|
|
if you are using raw thread api's you can pass one parameter to the CreateThread api. This could be your HWND.
If you are using a thread class, derive your own class, set all the parameters as member variables before you run the class...
I also got the blogging virus..[^]
|
|
|
|
|
Thanks! Got that working.
Now, I will see if this one works for my chat. For my FTP client it does!
DKT
|
|
|
|
|
Hi
I have a tab control with owner draw enabled in which I am drawing a icon and a text. It works perfectly fine when the TCS_VERTICAL option is not selected. But when I select TCS_VERTICAL option I am not able to see the text. Could anyone knows a solution for this?
Regards
|
|
|
|
|
Are you drawing the text correctly - i.e. does your custom drawing code respect the tab control's orientation?
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Can't we draw the text horizontally(left to right) in a Vertical tab? I have set the tab sizes accordingly, but I can't see any text being displayed.
|
|
|
|
|
You'll need to draw your text within the tab's bounds (regardless of the tab's orientation) if you want to see it.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Hi
I need to remove a character from a string
normally i would use
mystr.Remove('%')
to remove the % char
but i need to remove the ' char
i cant put mystr.Remove(''')
i know its somthing simple, but cant think what
any ideas
ta
si
|
|
|
|
|
si_69 wrote:
i cant put mystr.Remove(''')
try mystr.Remove('\'')
suhredayan There is no spoon.
|
|
|
|
|
Try escape sequence -> mystr.Remove('\'');
Rather basic issues when operating with strings. e.g. if you want to put filename (with path) into string, you should do it like this:
char szFile[_MAX_PATH]="C:\\Myfolder\\Myfile.txt";
|
|
|
|
|
i have made a simple mailslot client server program on vc++ without MFC.but writeFile is not working on windows2000,while it works correctly on windows 98 and XP.
PLEASE HELP ME
|
|
|
|
|
What is the error you getting. Are you doing an asynchronous writting?
suhredayan There is no spoon.
|
|
|
|
|
i am doing synchronous transfer of data from ane process to another .in client the write file function is giving error 1231 -> unable to access network location. but why ?
this functioin works well in windows xp
the client program is
#include<windows.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
#include<malloc.h>
#include<process.h>
HANDLE hSlot1;
HANDLE hStdOut;
HDC hdc;
BOOL WINAPI WRITESLOT( HDC hdc)
{
LPSTR lpszMessage = "Message for sample_mailslot in primary domain.";
BOOL fResult;
HANDLE hFile;
DWORD cbWritten;
hFile = CreateFile("\\\\*\\mailslot\\sample_mailslot.txt",
GENERIC_WRITE,
FILE_SHARE_READ, // required to write to a mailslot
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
cout<<"Primary domain";
return FALSE;
}
cout<<hfile;
="" fresult="WriteFile(hFile," lpszmessage,="" lstrlen(lpszmessage)="" +="" 1,="" include="" terminating="" null="" &cbwritten,="" null);
="" cout<<fresult;
="" int="" k="0;
" cout<<k;
if="" (!fresult)=""
{="" cout<<"writefile="" error";
="" return="" false;=""
}=""
cout<<
"writefile="" successful.";
=""
fresult="CloseHandle(hFile);"
if="" cout<<"closehandle";
=""
cout<<"closehandle="" successful.";
return="" true;=""
="" }
void="" main="" (void)
{
="" hdc="GetDC(NULL);
" writeslot(hdc);
}
<b="">and the server is :
#include<windows.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include<iostream.h>
#include<malloc.h>
#include<process.h>
HANDLE hSlot1;
HANDLE hStdOut;
HDC hdc;
BOOL FAR PASCAL Makeslot(HDC hdc)
{
LPSTR lpszSlotName = "\\\\.\\mailslot\\m";
// The mailslot handle "hSlot1" is declared globally.
cout<<" wwwwwwwwww";
hSlot1 = CreateMailslot(lpszSlotName,
0, // no maximum message size
MAILSLOT_WAIT_FOREVER, // no time-out for operations
(LPSECURITY_ATTRIBUTES) NULL); // no security attributes
if (hSlot1 == INVALID_HANDLE_VALUE)
{
//ErrorHandler( "CreateMailslot"); // local error handler
cout<<"unable to cre";
return FALSE;
}
cout<<"created mial successfullly";
// TextOut(hdc, 10, 10, "CreateMailslot successful.", 26); */
return TRUE;
}
BOOL WINAPI Readslot( HDC hdc)
{
DWORD cbMessage, cMessage, cbRead;
BOOL fResult;
LPSTR lpszBuffer;
CHAR achID[80];
DWORD cAllMessages;
HANDLE hEvent;
OVERLAPPED ov;
cbMessage = cMessage = cbRead = 0;
hEvent = CreateEvent(NULL, FALSE, FALSE, "ExampleSlot");
ov.Offset = 0;
ov.OffsetHigh = 0;
ov.hEvent = hEvent;
// Mailslot handle "hSlot1" is declared globally.
cout<<"reading\n";
fResult = GetMailslotInfo(hSlot1, // mailslot handle
(LPDWORD) NULL, // no maximum message size
&cbMessage, // size of next message
&cMessage, // number of messages
(LPDWORD) NULL); // no read time-out
if (!fResult)
{
cout<<"GetMailslotInfo";
//ErrorHandler(hwnd, "GetMailslotInfo");
return FALSE;
}
if (cbMessage == MAILSLOT_NO_MESSAGE)
{
// cout<<"MAILSLOT_NO_MESSAGE";
return TRUE;
}
cAllMessages = cMessage;
while (cMessage != 0) // retrieve all messages
{
// Create a message-number string.
wsprintf((LPSTR) achID,
"\nMessage #%d of %d\n", cAllMessages - cMessage + 1,
cAllMessages);
// Allocate memory for the message.
lpszBuffer = (LPSTR) GlobalAlloc(GPTR,
lstrlen((LPSTR) achID) + cbMessage);
lpszBuffer[0] = '\0';
fResult = ReadFile(hSlot1,
lpszBuffer,
cbMessage,
&cbRead,
&ov);
if (!fResult)
{
cout<<"ReadFile error";
// ErrorHandler(hwnd, "ReadFile");
GlobalFree((HGLOBAL) lpszBuffer);
return FALSE;
}
// Concatenate the message and the message-number string.
lstrcat(lpszBuffer, (LPSTR) achID);
// Display the message.
/*MessageBox(hwnd,
lpszBuffer,
"Contents of Mailslot",
MB_OK);
*/
GlobalFree((HGLOBAL) lpszBuffer);
fResult = GetMailslotInfo(hSlot1, // mailslot handle
(LPDWORD) NULL, // no maximum message size
&cbMessage, // size of next message
&cMessage, // number of messages
(LPDWORD) NULL); // no read time-out
if (!fResult)
{
cout<<"error GetMailslotInfo";
//ErrorHandler(hwnd, "GetMailslotInfo");
return FALSE;
}
}
return TRUE;
}
BOOL WINAPI WRITESLOT( HDC hdc)
{
LPSTR lpszMessage = "Message for sample_mailslot in primary domain.";
BOOL fResult;
HANDLE hFile;
DWORD cbWritten=0;
hFile = CreateFile("\\\\*\\mailslot\\m",
GENERIC_WRITE,
FILE_SHARE_READ, // required to write to a mailslot
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
//FindFirstFile("\\\\*\\mailslot\\sample_mailslot",&FindFileData);
if (hFile == INVALID_HANDLE_VALUE)
{
cout<<"Primary domain";
//ErrorHandler(hwnd, "Primary domain"); // local error handler
return FALSE;
}
cout<
|
|
|
|
|
tulika_8_2003 wrote:
i am doing synchronous transfer of data from ane process to another .in client the write file function is giving error 1231 -> unable to access network location. but why ?
this functioin works well in windows xp
I'v not gone through your code. BTW check this link Mailslot programs may be slow in Windows 2000[^]
suhredayan There is no spoon.
|
|
|
|
|
Hi,
I have to validate a field entry on kill focus of the edit control.If the user enters invalid data, a error message box should pop up and focus should remain on the edit control only so as to allow user to change the wrong entry. The problem is, this validation should not occur when user is exiting from the dialog like pressing cancel or exit. But when he clicks on the cancel button, kill foucs gets called and if the user has entered wrong data, error message will pop. Infact he won't be able to exit until he corrects the entry, which is ridiculous.
To avoid this problem, I switched validation from kill focus to SetFocus of the next control.
The program behaviour is --
User enters data in Control A
Then he puts cursor on Control B. Control B::On Set Focus validates the ControlA:data. IF wrong, pops up the message box and sets the focus to Control A.
But whenever user presess OK on the message box, focus again goes to Control B rather than going to Control A. Again validate is called and again the message box pops up. This goes in loop.
I didn't want to put the validations on En_change or use a bool vble for skipping the validations next time.
Any ideas will help a lot both on killfocus and setfocus front.
|
|
|
|
|
Hi there,
All you have to do is create a handler for trapping the EN_KILLFOCUS so that you get the message that the edit control is loosing the focus. So inside the handler put the MessageBox that you want to popup. When the user clicks on OK on the dialog box, edit control looses the focus. So to ensure that the focus is on the edit control, create a control variable for the edit control suppose(m_control) do the following after the statement following the MessageBox
CPoint set(0,0);
m_control.SetFocus();
m_control.SetCaretPos(set);
|
|
|
|
|
Validating data during a WM_KILLFOCUS message indicates a bad design. That message gets sent in too many situations so picking and choosing which one(s) you are interested in will lead to trouble. The most reliable way of validating data on a dialog box is to check the state of each control anytime a control changes. Set up a "change" handler for each control and do the validating in it. If all conditions are met, only then do you enable the OK button. I do this for each of my dialogs. It is very clean and reliable. Read here for more.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
aaaah.....if ur specifiaction demandz u to have a validation of the data entered onkillfocus,then herez ur answer.....
click thiz.....[^]
cheerz.....
"faith, hope, love remain, these three.....; but the greatest of these is love" -1 Corinthians 13:13
|
|
|
|
|
hiho@ll
i'm using outport (outport.sourceforge.net) to extract contacts from outlook
outport uses an COleDispatchDriver Wrapper and the InvokeHelper method to get the data it needs
the invokehelper function gets a DISPID parameter, which identifies the methode which should be called
my problem is how can i write some contacts back to outlook
and anybody knows where i get a list of available methods for invokehelper!?
i think i could use invokehelper, to add new contacts to outlook, but how?
thx@ll
|
|
|
|
|
Hi Community,
how can i implement a Email functions in my MFC Program, i have to create a function that allows a sending Emails from Program! Not a MAPI i thing something like SMTP? Problem is that i dont have any experience with WinSock or something litke this!!!
thanx!
Mirsad
|
|
|
|
|
|
Hi,
thanx for the link, but author says that i need VS7(.Net) and i have a Visual Studio 6 (MFC), is there any problems?
mirsad
|
|
|
|
|