|
If I remember correctly, lParam1 and lParam2 of the sorting callback function, do not contain the index of the items to compare, but instead they refer to the user data of those two items (You know, it's the custom value you can associate to any item by calling the function SetItemData )
|
|
|
|
|
Stlan wrote:
If I remember correctly...
You are correct. Most folks do not know that the control calls GetItemData() before calling their compare function. This is why SetItemData() is needed.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Hi guys,
I once coded a chat program. Server - Client based. It worked like a charm. But the only problem was, that the sever app worked in an endless loop to receive messages and wait for new connections. This raises the cpu to 50 and more per cent.
How can I avoid that? I thought about using threads. But this doesnt seem to solve the problem. What can I do? And if I should use threads, which function to take? There are alot out there.
I am working with visual C++ but NOT with MFC.
DKT
|
|
|
|
|
Try the Winsock Programmer's FAQ
In particular, read
Which I/O Strategy Should I Use?
If I remember correctly, there should be sample C code of the various techinques somewhere on that site.
Pssst. You see that little light on your monitor? That's actually a government installed spy camera. Smile and wave to big brother!
|
|
|
|
|
Wow. Thats nice! I will read that!
Thank you!
DKT
|
|
|
|
|
are you using Blocking sockets or Non blocking Socket!
It seems you are using nonblocking sockets which incresing the load on CPU!. try recode you client server using Blocking socket this may help you drop down your cpu usage
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
|
|
|
|
|
Yeah, I used nonblocking mode. But if I switch to blocking mode, then the whole app stands, and waits for an incoming connection. For this I need threads I think, right?
DKT
|
|
|
|
|
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.
|
|
|
|